본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 11758 CCW

by Alan_Kim 2023. 6. 14.
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(Counter-Clockwise)를 알면 쉬운 문제.
  • 외적과 관련되어있는데 외적에서 절대값을 없앤 $(X_{1}Y_{2}+X_{2}Y_{3}+X_{3}Y_{1})-(X_{2}Y_{1}+X_{3}Y_{2}+X_{1}Y_{3})$의 부호에 따라 벡터가 움직이는 방향이 다르다는 것이다.
    •  $(X_{1}Y_{2}+X_{2}Y_{3}+X_{3}Y_{1})-(X_{2}Y_{1}+X_{3}Y_{2}+X_{1}Y_{3})$ > 0 : 반시계 방향
    •  $(X_{1}Y_{2}+X_{2}Y_{3}+X_{3}Y_{1})-(X_{2}Y_{1}+X_{3}Y_{2}+X_{1}Y_{3})$ = 0 : 일직선
    •  $(X_{1}Y_{2}+X_{2}Y_{3}+X_{3}Y_{1})-(X_{2}Y_{1}+X_{3}Y_{2}+X_{1}Y_{3})$ < 0 : 시계 방향

 

CODE

P = []
for _ in range(3):
    a, b = map(int, input().split())
    P.append((a,b))
answer = 0
for i in range(3):
    answer += P[i][0]*P[(i+1)%3][1]
    answer -= P[(i+1)%3][0]*P[i][1]
if answer>0:
    print(1)
elif answer == 0:
    print(0)
else:
    print(-1)
728x90
반응형

댓글