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 알고리즘은 세 개의 점을 이용하여 벡터의 외적을 계산하여 점의 위치 관계를 판별하는 방법입니다.

  1. 주어진 세 점 (x1, y1), (x2, y2), (x3, y3)의 외적을 계산합니다. 외적은 다음과 같이 계산됩니다:
  2. ccw = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1)
  3. ccw의 값에 따라 세 점의 위치 관계를 판별합니다:
  • ccw > 0: 세 점이 시계 방향에 위치합니다.
  • ccw < 0: 세 점이 반시계 방향에 위치합니다.
  • ccw = 0: 세 점이 일직선에 위치합니다.
  1. 각 경우에 따라 적절한 결과를 출력합니다:
  • ccw > 0인 경우: printf("1");
  • ccw < 0인 경우: printf("-1");
  • ccw = 0인 경우: printf("0");