11758 - CCW
본문
2차원 좌표 평면 위에 있는 점 3개 $P_1, P_2, P_3$가 주어진다. $P_1, P_2, P_3$를 순서대로 이은 선분이 어떤 방향을 이루고 있는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 $P_1$의 ($x_1, y_1$), 둘째 줄에 $P_2$의 ($x_2, y_2$), 셋째 줄에 $P_3$의 ($x_3, y_3$)가 주어진다. ($-10\,000 \leq x_1, y_1, x_2, y_2, x_3, y_3 \leq 10\,000$) 모든 좌표는 정수이다. $P_1, P_2, P_3$의 좌표는 서로 다르다.
출력
$P_1, P_2, P_3$를 순서대로 이은 선분이 반시계 방향을 나타내면 1
, 시계 방향이면 -1
, 일직선이면 0
을 출력한다.
제한
시간 제한 | 메모리 제한 |
---|---|
1sec | 256MB |
풀이
CCW 알고리즘의 기본형 문제이다. 설명은 참고 알고리즘을 참고하자.
- 참고 알고리즘 : CCW
코드
사용 언어 : C
최종 수정일 : 2024 / 2 / 27
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
32
33
#include <stdio.h>
typedef struct Node {
int x, y;
} ND;
int ccw(ND a, ND b, ND c) {
int t1 = (a.x * b.y + b.x * c.y + c.x * a.y);
int t2 = (b.x * a.y + c.x * b.y + a.x * c.y);
if (t1 - t2 > 0) {
return 1;
} else if (t1 - t2 < 0) {
return -1;
} else {
return 0;
}
}
int main() {
int x1, y1;
int x2, y2;
int x3, y3;
scanf("%d %d", &x1, &y1);
scanf("%d %d", &x2, &y2);
scanf("%d %d", &x3, &y3);
ND a = (ND){x1, y1}, b = (ND){x2, y2}, c = (ND){x3, y3};
printf("%d", ccw(a, b, c));
return 0;
}