11758번 : CCW / C++

2023. 6. 18. 12:01개인공부/코딩테스트

11758번: CCW (acmicpc.net)

 

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

CCW알고리즘은 외적을 사용해서 넓이 값의 부호를 판단해서 두 직선의 방향을 판단하는 알고리즘이다.


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
#include <iostream>
 
using namespace std;
 
typedef long long ll;
 
ll CCW(ll x1, ll y1, ll x2, ll y2, ll x3, ll y3)
{
    return (x2 - x1) * (y3 - y1) - (x3 - x1)*(y2 - y1);
}
 
 
int main()
{
    ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
 
    ll x[3], y[3];
    for (int i = 0; i < 3++i)
    {
        cin >> x[i] >> y[i];
    }
 
 
    ll c = CCW(x[0], y[0], x[1], y[1], x[2], y[2]);
    if (c == 0)
    {
        cout << 0;
    }
    else if (c > 0)
    {
        cout << 1;
    }
    else
        cout << -1;
 
 
 
 
    return 0;
}
 
cs