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
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 1208 부분수열의 합 (0) | 2023.06.22 |
---|---|
[python] 백준 20055 컨베이어 벨트 위의 로봇 (0) | 2023.06.22 |
[python] 백준 17822 원판 돌리기 (0) | 2023.06.07 |
[python] 백준 17140 이차원 배열과 연산 (0) | 2023.06.03 |
[python] 백준 16236 아기 상어 (0) | 2023.05.29 |
댓글