일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Algorithm
- deque
- 비트마스킹
- BFS
- 너비우선탐색
- 소수
- ccw
- 에라토스테네스의 체
- 이진 탐색
- Two Pointers
- recursion
- 위상정렬
- 딕셔너리
- binary search
- 비트연산
- Python
- CCW 알고리즘
- 외적
- 알고리즘
- BOJ
- 재귀
- Bitmasking
- 큐
- 에라토스테네스
- CCW알고리즘
- 투 포인터
- 백준
- dijkstra algorithm
- DP
- 다익스트라
- Today
- Total
꾸꾸리
[BOJ/Python] 11758_CCW 본문
문제 출처: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 |
- 세 점 A, B, C의 x,y좌표를 입력받는다.
- AB벡터와 AC벡터인 p1과 p2를 생성한다.
- CCW를 이용하여 세 점의 방향관계를 구하여 출력한다.
'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 |