https://www.acmicpc.net/problem/11758
CCW 알고리즘을 그대로 구현해주면 된다.
p1 p2 p3가 있을 때, 순서대로 선분을 만들면 선분 p1p2, 선분 p2p3가 생긴다.
나중에 생긴 선분 p2p3가 선분 p1p2에 대해서 어떻게 위치하고 있는지 생각해보면 된다.
p2를 p1으로 평행이동해서 벡터를 생각해본다면 이해가 좀 더 쉽다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //좌표값 정수 #include<iostream> using namespace std; typedef long long ll; struct POT { int x, y; }; int ccw(POT p1, POT p2, POT p3) { ll ret; ret = (p1.x*p2.y + p2.x*p3.y + p3.x* p1.y) - (p1.y*p2.x + p2.y*p3.x + p3.y* p1.x); if (ret < 0) return -1; else if (ret == 0) return 0; else return 1; } int main(void) { POT p1, p2, p3; cin >> p1.x >> p1.y >> p2.x >> p2.y >> p3.x >> p3.y; cout << ccw(p1, p2, p3); return 0; } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include<iostream> using namespace std; int ccw(int x1, int y1, int x2, int y2, int x3, int y3) { if ((x1*y2 + x2 * y3 + x3 * y1) - (y1*x2 + y2 * x3 + y3 * x1) > 0) return 1; else if ((x1*y2 + x2 * y3 + x3 * y1) - (y1*x2 + y2 * x3 + y3 * x1) < 0) return -1; else return 0; } int main(void) { int x1, y1, x2, y2, x3, y3; cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3; cout << ccw(x1, y1, x2, y2, x3, y3) << '\n'; return 0; } | cs |
'알고리즘 문제 풀이 > 백준 온라인 저지' 카테고리의 다른 글
백준 2162: 선분 그룹 C++ (0) | 2019.08.11 |
---|---|
백준 2166 다각형의 면적 C++ (0) | 2019.08.10 |
백준 1941 소문난 칠공주 C++ (0) | 2019.08.10 |
백준 2023 신기한 소수 C++ (0) | 2019.08.10 |
백준 2661 좋은수열 C++ (0) | 2019.08.09 |