상세 컨텐츠

본문 제목

[CCW] 백준 11758: CCW

프로그래밍/코테 준비

by 초코순쌀과자 2023. 3. 15. 00:01

본문

문제: 2차원 좌표 평면 위에 있는 점 3개 P1, P2, P3가 주어진다. P1, P2, P3를 순서대로 이은 선분이 어떤 방향을 이루고 있는지 구하는 프로그램을 작성하시오.

---

입력: 첫째 줄에 P1의 (x1, y1), 둘째 줄에 P2의 (x2, y2), 셋째 줄에 P3의 (x3, y3)가 주어진다. (-10,000 ≤ x1, y1, x2, y2, x3, y3 ≤ 10,000) 모든 좌표는 정수이다. P1, P2, P3의 좌표는 서로 다르다.

---

 

기하 알고리즘의 기초가 되는 CCW 알고리즘을 사용하는 문제.

 

*CCW(Counter Clock Wise) 알고리즘이란?

평면에 놓여 있는 세 점의 위치관계를 파악할 수 있는 알고리즘이다. 세 점의 연결이 반시계 방향인지, 시계 방향인지, 일직선인지를 판별할 수 있다. 벡터의 외적을 구하는 공식을 활용한다.

 

아래는 답안 코드이다.

# ccw 알고리즘
# 세 점의 방향성을 판단하는데 사용되는 알고리즘임
def ccw(x1, x2, x3, y1, y2, y3):
    return (x1 * y2 + x2 * y3 + x3 * y1) - (y1 * x2 + y2 * x3 + y3 * x1)

x1, y1 = map(int, input().split())
x2, y2 = map(int, input().split())
x3, y3 = map(int, input().split())

result = ccw(x1, x2, x3, y1, y2, y3)
if result == 0:
    print(0)
elif result > 0:
    print(1)
else:
    print(-1)

관련글 더보기

댓글 영역