Processing math: 100%
본문 바로가기

PS/백준

[BOJ] 백준 11758 CCW (Swift)

반응형

문제

https://www.acmicpc.net/problem/11758

 

11758번: CCW

첫째 줄에 P1의 (x1, y1), 둘째 줄에 P2의 (x2, y2), 셋째 줄에 P3의 (x3, y3)가 주어진다. (-10,000 ≤ x1, y1, x2, y2, x3, y3 ≤ 10,000) 모든 좌표는 정수이다. P1, P2, P3의 좌표는 서로 다르다.

www.acmicpc.net

풀이

3개를 가지고 방향성을 알 수 있는 CCW라는 알고리즘이 있습니다.
공식으로는
direction=(x1×y2+x2×y3+x3×y1)(y1×x2+y2×x3+y3×x1)
direction 양수이면 반시계방향, 음수이면 시계방향 0이면 직선입니다.

소스코드

var x: [Int] = []
var y: [Int] = []
for _ in 0..<3 {
let input = readLine()!.split(separator: " ").map { Int($0)! }
x.append(input[0])
y.append(input[1])
}
let area = (x[0] * y[1] + x[1] * y[2] + x[2] * y[0]) - (y[0] * x[1] + y[1] * x[2] + y[2] * x[0])
print(area == 0 ? 0 : area > 0 ? 1 : -1)
view raw CCW.swift hosted with ❤ by GitHub

후기

이 글을 참고하여 풀이하였습니다.
수학.. 어렵다..

반응형