728x90
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
문제 제목 그대로 CCW 알고리즘을 이용하여 푸는 문제이다.
CCW 알고리즘은 벡터의 외적을 활용해 푸는 알고리즘으로, 학창시절에 배웠던 신발끈 공식을 적용하면 된다.
선분 AB를 u라 하고, AC를 v라 할 때, 위와 같은 외적 공식을 적용할 수 있다.
θ 가 180 < θ < 360 이면 시계방향이고, sin θ 값이 음수이다.
반대로, θ 가 0 < θ < 180이면 반시계 방향이고 sin θ 값이 양수이다.
만약 θ 가 0 또는 180일 경우 sin θ 값은 0이 된다.
import sys
#from collections import deque
#sys.setrecursionlimit(10**6)
input = sys.stdin.readline
def ccw():
return (x1*y2+x2*y3+x3*y1) - (x2*y1+x3*y2+x1*y3)
if __name__ == "__main__":
x1, y1 = map(int,input().split())
x2, y2 = map(int,input().split())
x3, y3 = map(int,input().split())
ans = ccw()
if ans > 0 : print(1) # 반시계
elif ans < 0: print(-1) # 시계
else: print(0)
728x90
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
[백준/파이썬] 2108번 통계학 (0) | 2023.03.30 |
---|---|
[백준/파이썬] 2941번 크로아티아 알파벳 (0) | 2023.03.28 |
[백준/파이썬] 1963번 소수 경로 (0) | 2023.03.21 |
[백준/파이썬] 5639번 이진 검색 트리 (0) | 2023.03.15 |
[백준/파이썬] 1965번 상자넣기 (0) | 2023.03.14 |