์ธ ์ ์ ๋ฐฉํฅ์ฑ์ ํ๋จํ๋ ๊ธฐํํ์ ๋ฌธ์
CCW ๊ฐ์ ์ํด ์ธ ์ ์ด ์ด๋ ๋ฐฉํฅ์ผ๋ก ํฅํ๋์ง ์ ์ ์๋ค.
๊ณต์์ ์๋์ ๊ฐ๋ค.
CCW(A, B, C) = (B.x - A.x) × (C.y - A.y) - (B.y - A.y) × (C.x - A.x)
๊ฒฐ๊ณผ ๊ฐ์ ๋ฐ๋ผ ์์: ๋ฐ์๊ณ๋ฐฉํฅ, ์์: ์๊ณ ๋ฐฉํฅ, 0: ์ผ์ง์ ์ ๋ํ๋ธ๋ค.
CCW๊ฐ ์ด๋ป๊ฒ ๋์ถ๋๋์ง ์์๋ณด์.
์ข์ธก ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ์ขํ๋ฅผ ๊ฐ์ง ์ธ ์ ์ด ์์ ๋, A๋ฅผ ์์ ์ผ๋ก C์ B์ ๋ฒกํฐ๋ฅผ ๊ตฌํ๋ฉด ์ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋๋ค.
๊ณต์์ ์๋์ ๊ฐ๋ค.
A' = (0, 0) ← A์์ A๋ฅผ ๋บ ๊ฒ
B' = (bx - ax, by - ay) ← B์์ A๋ฅผ ๋บ ๊ฒ (6, 2) ์ด๋ผ๊ณ ๊ฐ์
C' = (cx - ax, cy - ay) ← C์์ A๋ฅผ ๋บ ๊ฒ (7, 3) ๋ผ๊ณ ๊ฐ์
๊ทธ๋ผ ๋ ๋ฒกํฐ๊ฐ์ ํ์ ๋ฐฉํฅ์ ์์๋ณด์.
2D์์ ์ธ์ ๊ณต์:
๋ฒกํฐ u = (ux, uy)
๋ฒกํฐ v = (vx, vy)
u × v = ux × vy - uy × vx
2์ฐจ์ ๋ฒกํฐ์ ์ธ์ ๊ณต์์ ํตํด ๋ฐฉํฅ์ ๊ตฌํ ์ ์๋ค.
B`(6, 2)์ C`(7, 3)์ ๋ฐฉํฅ์ ๊ตฌํด๋ณด์.
6 * 3 - 2 * 7 = 4๋ก ์์์ธ ๊ฒ์ ์ ์ ์๋ค.
์ค์ ๊ทธ๋ฆผ์์ ํ์ธํ ๊ฒฐ๊ณผ๋ B -> C ๋ฅผ ํฅํ๋ ๋ฐฉํฅ์ ๋ฐ์๊ณ๋ฐฉํฅ์ด๋ค.
์์ ์ด๋๋ถํฐ 2์ฐจ์ ์ธ์ ๊ณต์์ ๋ชจ๋ ์ ์ฉํ๊ฒ CCW ์ด๋ค.
์ฐ๋ฆฌ๋ ์์ผ๋ก CCW๋ฅผ ํ์ฉํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์๋ค.
๊ฐ์ฅ ๋ํ์ ์ผ๋ก BOJ์ ์ ๋ถ ๊ต์ฐจ 1 ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด๋ณด์. (๋ค์ ํฌ์คํธ์์)
'์๊ณ ๋ฆฌ์ฆ > ์๊ณ ๋ฆฌ์ฆ ์ข ๋ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Unbounded Knapsack (๋ฌดํ ๋ฐฐ๋ญ) (1) | 2025.06.28 |
---|---|
[MST] ์ต์ ์คํจ๋ ํธ๋ฆฌ - ํฌ๋ฃจ์ค์นผ(Kruskal), ํ๋ฆผ(Prim) (0) | 2024.07.11 |
[์ต๋จ๊ฒฝ๋ก] Bellman-Ford Algorithm (0) | 2024.07.06 |
[์ด๋ถ ํ์] ์ด๋ถ ํ์(Binary Search) ์ด๋ ? (0) | 2024.02.01 |