https://www.acmicpc.net/problem/11758
코드
box = []
for _ in range(3):
box.append(list(map(int,input().split())))
def ccw(p1,p2,p3):
return (p1[0]*p2[1] + p2[0]*p3[1] + p3[0]*p1[1] - (p2[0]*p1[1] + p3[0]*p2[1] + p1[0]*p3[1]))
ans = ccw(box[0],box[1],box[2])
if ans > 0:
print(1)
elif ans == 0:
print(0)
else:
print(-1)
풀이
우선 이 문제를 풀기 위해서는 CCW 알고리즘을 알아야 한다. 기하 알고리즘의 기초라고 하는데 나는 기하 알고리즘을 풀어본 적이 없기 때문에 생소했다.
CCW알고리즘은 평면에 놓여진 세 점의 방향 관계를 구하는 알고리즘이라고 한다. ccw 함수는 평면에 점 a, b, c가 순서대로 있다고 가정했을 때 방향이 시계방향이면 음수, 평행이면 0 반시계 방향이면 양수를 반환한다.
ccw는 신발끈 공식을 이용한다.
백준 블로그에도 잘 정리되어있으니 참고하면 좋을 것이다.
https://www.acmicpc.net/blog/view/27
728x90
'파이썬알고리즘' 카테고리의 다른 글
백준 10866 (duque) 파이썬 (0) | 2022.05.10 |
---|---|
백준 2164 (deque) 파이썬 (0) | 2022.05.09 |
백준 14002 파이썬 (0) | 2022.05.04 |
백준 10845번 큐 (파이썬) (0) | 2022.04.23 |
백준 1605 한수 (파이썬) (0) | 2021.08.30 |