(BOJ11785 CCW

Link copied to clipboard

문제 설명

Link copied to clipboard
  • 가장 기본적인 CCW 문제
  • 세 점을 순서대로 2개의 벡터로 생각할 수 있고,
    • 두 백터의 사이 각을 백터 외적으로 구할 수 있음
$$\vec{a}\times\vec{b} = (\vert\vec{a}\vert\vert\vec{b}\vert \sin \theta)\vec{n}, (0 \leq \theta \leq \pi) $$
  • 사이각을 $\theta$라고 하면, sin값이 양수, 0, 음수에 따라 각도를 알아낼 수 있음

문제 풀이

Link copied to clipboard
CCW = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1)
print(0 if not CCW else 1 if CCW > 0 else -1)
  • 세 점을 순서대로 (x1, y1), (x2, y2), (x3, y3)으로 받은 후
    • 두개의 백터로 나누어 생각,
    • 외적값을 구하는 방식을 이용하여 사이 각에 대한 sin값을 알아냄
    • sin값은 180도를 기준으로 양수, 0, 음수이므로 각도를 알아낼 수 있음