BOJ 11758. CCW
πββοΈ[Gold V] CCW - 11758
μ±λ₯ μμ½
λ©λͺ¨λ¦¬: 2020 KB, μκ°: 0 ms
λΆλ₯
κΈ°νν
μ μΆ μΌμ
2024λ 6μ 9μΌ 13:57:56
λ¬Έμ μ€λͺ
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μ μΆλ ₯νλ€.
πνμ΄
CCW (Counter Clockwise) μκ³ λ¦¬μ¦μ λ μ μ μ§λλ μ§μ μ λ°©ν₯μ νμΈνλ μκ³ λ¦¬μ¦μ
λλ€.
μ΄ μκ³ λ¦¬μ¦μ μ£Όλ‘ κΈ°ννμ λ¬Έμ μμ μ¬μ©λλ©°, μ λΆκ³Ό μ , λλ μΈ μ μ μμΉ κ΄κ³λ₯Ό νλ¨νλ λ°μ νμ©λ©λλ€.
μ£Όμ΄μ§ μΈ μ A, B, Cκ° μμ λ, CCW μκ³ λ¦¬μ¦μ λ€μκ³Ό κ°μ μ리λ₯Ό μ¬μ©νμ¬ μΈ μ μ μμΉ κ΄κ³λ₯Ό νμΈν©λλ€:
AB 벑ν°μ AC 벑ν°μ μΈμ μ κ³μ°ν©λλ€.
μΈμ μ κ²°κ³Όκ° μμμΈ κ²½μ°μλ μ A, B, Cκ° λ°μκ³ λ°©ν₯μΌλ‘ μμλλ‘ λμ΄λ©λλ€.
μ΄ κ²½μ° μΈ μ μ CCW κ΄κ³μ
λλ€.
μΈμ μ κ²°κ³Όκ° μμμΈ κ²½μ°μλ μ A, B, Cκ° μκ³ λ°©ν₯μΌλ‘ λμ΄λ©λλ€. μ΄ κ²½μ° μΈ μ μ CW κ΄κ³μ
λλ€.
μΈμ μ κ²°κ³Όκ° 0μΈ κ²½μ°μλ μΈ μ μ΄ μΌμ§μ μμ μμΉν©λλ€.
μ΄λ¬ν CCW μκ³ λ¦¬μ¦μ μ£Όλ‘ μ λΆ κ΅μ°¨ μ¬λΆ νλ¨, λ€κ°νμ λ΄λΆ μ νλ³, λ³Όλ‘ λ€κ°ν(Convex Hull) κ΅¬μ± λ± λ€μν κΈ°ννμ λ¬Έμ μμ μ¬μ©λ©λλ€.
CCW μκ³ λ¦¬μ¦μ λ€μκ³Ό κ°μ΄ μνμ μΌλ‘ ννλ μ μμ΅λλ€:
CCW(A,B,C)=(B.xβA.x)Γ(C.yβA.y)β(B.yβA.y)Γ(C.xβA.x)
μ¬κΈ°μ (B.xβA.x)Γ(C.yβA.y) λ AB 벑ν°μ AC 벑ν°μ μΈμ μ zμ±λΆμ λνλ΄λ©°, μ΄ κ°μ΄ μμμΈμ§ μμμΈμ§μ λ°λΌ μΈ μ μ μμΉ κ΄κ³λ₯Ό νλ¨ν©λλ€.
πμ½λ
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <climits>
using namespace std;
// μ ꡬ쑰체
struct Point
{
int x, y;
};
// λ μ μ μ§λλ μ§μ μ λ°©ν₯μ νμΈνλ ν¨μ
int ccw(Point A, Point B, Point C)
{
int cross_product = (B.x - A.x) * (C.y - A.y) - (B.y - A.y) * (C.x - A.x);
if (cross_product > 0) return 1; // λ°μκ³ λ°©ν₯
else if (cross_product < 0) return -1; // μκ³ λ°©ν₯
else return 0; // μΌμ§μ
}
void solve()
{
Point A, B, C;
cin >> A.x >> A.y >> B.x >> B.y >> C.x >> C.y;
cout << ccw(A, B, C);
}
int main()
{
FILE* stream;
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
freopen_s(&stream, "input.txt", "rt", stdin);
solve();
return 0;
}