728x90
https://www.acmicpc.net/problem/11758
문제 제목 그대로 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 |