[ 문제 ]
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
[ 접근방법 ]
벡터의 외적을 활용하였다.
세 점 p[0], p[1], p[2]가 있을 때 두 벡터 p[0]p[1], p[1]p[2]의 외적을 계산한다.
두 벡터가 시계방향일 때와 반시계방향일 때 외적벡터의 방향도 정반대가 되기에
0과 비교하여 시계방향인지 반시계방향인지 일직선인지를 파악할 수 있다.
[ 소스코드 ]
#include <iostream>
using namespace std;
struct pos
{
int x, y;
};
pos p[3];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
for(int i = 0; i < 3; i++)cin >> p[i].x >> p[i].y;
// p0p1 = (p1x - p0x, p1y - p0y, 0), p1p2 = (p2x - p1x, p2y - p1y, 0)
int cnt = (p[1].x - p[0].x) * (p[2].y - p[1].y) - (p[1].y - p[0].y) * (p[2].x - p[1].x);
if(cnt > 0)cout << "1";
else if(cnt < 0)cout << "-1";
else cout << "0";
return 0;
}
'PS' 카테고리의 다른 글
[ 백준 / C++ ] 1202 : 보석 도둑 (0) | 2024.04.19 |
---|---|
[ 백준 / C++ ] 18111 : 마인크래프트 (0) | 2024.04.18 |
[ 백준 / C++ ] 1253 : 좋다 (0) | 2024.04.16 |
[ 백준 / C++ ] 10971 : 외판원 순회 2 (0) | 2024.04.15 |
[ 백준 / C++ ] 16486 : 운동장 한 바퀴 (0) | 2024.04.12 |