c c++ 언어 공부
백준 11758번 : CCW (C 언어)
Code C
2023. 6. 12. 00:50
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
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include <stdio.h>
int main() {
int x1, x2, x3, y1, y2, y3;
scanf("%d %d", &x1, &y1);
scanf("%d %d", &x2, &y2);
scanf("%d %d", &x3, &y3);
if (((x2 - x1) * (y3 - y2)) - ((y2 - y1) * (x3 - x2)) > 0)
{
printf("1");
}
else if (((x2 - x1) * (y3 - y2)) - ((y2 - y1) * (x3 - x2)) < 0)
{
printf("-1");
}
else
{
printf("0");
}
}
|
cs |
문제풀이:
1. 문제 설명
세 개의 점 (x1, y1), (x2, y2), (x3, y3)이 주어집니다. 이 때, 이 세 점이 시계 방향인지, 반시계 방향인지, 아니면 일직선에 위치하는지를 판별하는 문제입니다.
2. 코드 설명
주어진 코드는 CCW (Counter Clockwise) 알고리즘을 사용하여 세 점의 위치 관계를 판별합니다. CCW 알고리즘은 세 개의 점을 이용하여 벡터의 외적을 계산하여 점의 위치 관계를 판별하는 방법입니다.
- 주어진 세 점 (x1, y1), (x2, y2), (x3, y3)의 외적을 계산합니다. 외적은 다음과 같이 계산됩니다:
- ccw = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1)
- ccw의 값에 따라 세 점의 위치 관계를 판별합니다:
- ccw > 0: 세 점이 시계 방향에 위치합니다.
- ccw < 0: 세 점이 반시계 방향에 위치합니다.
- ccw = 0: 세 점이 일직선에 위치합니다.
- 각 경우에 따라 적절한 결과를 출력합니다:
- ccw > 0인 경우: printf("1");
- ccw < 0인 경우: printf("-1");
- ccw = 0인 경우: printf("0");