Home [11758] CCW
Post
Cancel

[11758] CCW

문제 링크 : https://www.acmicpc.net/problem/11758

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을 출력한다.

제한

시간 제한메모리 제한
1sec256MB

풀이

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;
}
This post is licensed under CC BY 4.0 by the author.