Post

[백준 C++] 11758번 CCW

백준 11758번 CCW c++로 풀이

[백준 C++] 11758번 CCW

11758번: CCW

문제 요약

문제

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
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
## 풀이
p1과 p3을 잇는 직선의 방정식을 구한 다음에 여기에 p2의 x값을 넣고 y가 위쪽에 있는지 아래에 있는지로 판별하면 된다. 이때 p1과 p3의 방향에 따라 정답이 달라진다.

## 어려웠던 점
처음에 직선의 방정식을 x로 해야 풀린다고 생각하여 괜히 복잡하게 했다.

## 배운 점 / 느낀 점


## 전체 코드
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct p{
    int x, y;
};

p l(p p1, p p2){
    return {p2.x-p1.x, p2.y-p1.y};
}

int n;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    p p1, p2, p3;
    cin >> p1.x >> p1.y;
    cin >> p2.x >> p2.y;
    cin >> p3.x >> p3.y;

    p l1 = l(p1, p3);
    if(l1.y == 0){
        if(l1.x > 0){
            if(p2.y > p1.y){
                cout << 1;
            }
            else if(p2.y < p1.y){
                cout << -1;
            }
            else{
                cout << 0;
            }
        }
        else{
            if(p2.y > p1.y){
                cout << -1;
            }
            else if(p2.y < p1.y){
                cout << 1;
            }
            else{
                cout << 0;
            }
        }
        return 0;
    }
    int x = (p2.y-p1.y)*l1.x/l1.y+p1.x;
    if(l1.y > 0){
        if(x < p2.x){
            cout << 1;
        }
        else if(x > p2.x){
            cout << -1;
        }
        else{
            cout << 0;
        }
    }
    else{
        if(x < p2.x){
            cout << -1;
        }
        else if(x > p2.x){
            cout << 1;
        }
        else{
            cout << 0;
        }
    }

    return 0;
}
This post is licensed under CC BY 4.0 by the author.