꾸꾸리

[BOJ/Python] 11758_CCW 본문

Algorithm/BOJ

[BOJ/Python] 11758_CCW

O773H 2023. 1. 14. 18:20
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

문제

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의 좌표는 서로 다르다.

출력

P1, P2, P3를 순서대로 이은 선분이 반시계 방향을 나타내면 1, 시계 방향이면 -1, 일직선이면 0을 출력한다.

예제 입력 1

1 1
5 5
7 3

예제 출력 1

-1

예제 입력 2

1 1
3 3
5 5

예제 출력 2

0

예제 입력 3

1 1
7 3
5 5

예제 출력 3

1

풀이

 

우선 CCW 알고리즘에 대한 설명은 아래 링크에 작성해 두었다.

 

CCW(counter clockwise) 알고리즘

1. CCW 알고리즘 이란 점 A,B,C 세 점이 존재하였을 때, 이 세 점의 방향관계를 구하는 알고리즘이다. CCW알고리즘은 A,B,C를 연결하였을 때, 반시계 방향일 경우 양수를, 시계 방향일 경우 음수를, 직

o773h.tistory.com

 

평면 위에 세 점 A,B,C가 존재하였을 때, AB벡터와 AC벡터의 외적을 이용하여(평면 위에 있는 세 점이므로 z좌표를 확인한다) 세 점의 방향관계를 구한다.

우선 코드는 다음과 같다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys
 
def ccw(p1,p2):
    if p1[0]*p2[1- p2[0]*p1[1]>0:
        return 1
    elif p1[0]*p2[1- p2[0]*p1[1]<0:
        return -1
    else:
        return 0
 
 
x1,y1 = map(int,sys.stdin.readline().split())
x2,y2 = map(int,sys.stdin.readline().split())
x3,y3 = map(int,sys.stdin.readline().split())
 
p1 = (x2-x1,y2-y1)
p2 = (x3-x1,y3-y1)
 
print(ccw(p1,p2))
cs

 

  1. 세 점 A, B, C의 x,y좌표를 입력받는다.
  2. AB벡터와 AC벡터인 p1과 p2를 생성한다.
  3. CCW를 이용하여 세 점의 방향관계를 구하여 출력한다.

 

728x90

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ/Python] 17386_선분 교차1  (0) 2023.01.16
[BOJ/Python] 2166_다각형의 면적  (4) 2023.01.15
[BOJ/Python] 2589_보물섬  (0) 2023.01.13
[BOJ/Python] 5430_AC  (0) 2023.01.12
[BOJ/Python] 20055_컨베이어 벨트 위의 로봇  (0) 2023.01.12