본문 바로가기
파이썬알고리즘

백준 11758 CCW 파이썬

by zho 2022. 5. 9.

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


코드

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

 

점 3개의 방향성을 나타내는 CCW

세 점 P1(x1, y1), P2(x2, y2), P3(x3, y3)가 있을 떄, 점 3개를 이은 선분은 어떤 방향성을 나타내게 될까요? 11758번 문제: CCW 가능한 경우의 수는 총 3가지가 있습니다. 반시계 방향, 시계 방향, 일직선. 시

www.acmicpc.net

 

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