반응형

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

 

 

[ 문제풀이 ]

 

1. 먼저 P1에서 P2로 향하는 벡터와 P1에서 P3로 향하는 벡터를 구합니다.

 

2.  두 벡터를 외적 합니다.

 

3. 외적의 값이 0보다 작다면 시계방향, 0보다 크다면 반시계 방향, 0이라면 일직선상에 있는 경우입니다.

 

[ 소스코드 ]

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
#include<iostream>
 
using namespace std;
 
pair<intint> P[3];
pair<intint> vect[2];
 
int main()
{
    for (int i = 0; i < 3; i++) {
        int x, y;
        scanf("%d %d"&x, &y);
 
        P[i] = { x,y };
    }
 
    vect[0= { P[0].first - P[1].first, P[0].second - P[1].second };
    vect[1= { P[0].first - P[2].first, P[0].second - P[2].second };
 
    int ans = vect[0].first * vect[1].second - vect[0].second * vect[1].first;
 
    if (ans > 0) {    //반시계
        printf("%d"1);
    }
    else if (ans < 0) {    //시계
        printf("%d"-1);
    }
    else {    //일직선
        printf("%d"0);
    }
}
cs
반응형

+ Recent posts