๊ฐ๋ฐ ์ผ์ง 1 : https://gall.dcinside.com/mgallery/board/view?id=game_dev&no=116398
์ด๋ฒ ์ผ์ง์์๋ ์ ์ฐจ์ ๋งต ์์ฑ? ๋ง๋ ๊ฒ์ ์ ๋ฆฌํ ๊ฑฐ์.
์๊ณ ๋ฆฌ์ฆ๋ ๊ธธ๊ณ ์์ด๋์ด๋ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํด์.
๋จผ์ ๊ฐ๋ฐ ์ผ์ง๋ฅผ ๋ง์ด ์ ์ ๊ฒ๋ ์๋๋ผ์ ์ด๋ค ๊ฒ์์ ๋งต์ ๋ง๋ค๋ ค๊ณ ํ๋ ์ง ๋ชจ๋ฅผ๊ฑฐ์.
๊ธฐ๋ณธ์ ์ธ ๊ฒ์์ ๊ท์น์ 2D Tilt Maze๋ฅผ ๋ฐ๋ฅด๊ณ , ๋ถ๊ฐ์ ์ผ๋ก ์ ๊ณผ ์์ดํ ๋ฑ์ด ์กด์ฌํ๋ ๊ฒ์์ ์ ์ํ ๊ฑฐ์.
์๋์ ๋งํฌ์์ ๊ฐ๋จํ๊ฒ 2D Tilt Maze๋ฅผ ํ๋ ์ดํ ์ ์๊ณ , ๊ธ๋ฐฉ ์ด๋ค ๊ฒ์์ธ์ง ์๊ฒ ๋ ๊ฑฐ์.
https://www.mathsisfun.com/games/tilt-maze.html
๋งต ์์ฑ์์ ์ค์ํ ๊ฒ์ ํ๋ ์ด์ด์ ์์ ์์น, ๋ฒฝ์ ๋ฐฐ์น, ๋ชฉํ๋ฌผ์ ๋ฐฐ์น์.
์ด ์ธ๊ฐ์ง ์์๊ฐ ์ฟต์ง์ด ์ ๋ง์์ผ์ง ํด๋ฆฌ์ดํ ์ ์๋ ๋งต์ด ๋๋ ๊ฑฐ์.
๋งต์ ๋๋ค์ผ๋ก ์์ฑํ๊ณ , ๋งต์ ํด๋ฆฌ์ด ์ฌ๋ถ๋ ์์ ํ์์ผ๋ก๋ ํด๊ฒฐํ ์ ์์ง๋ง ๋๋ฌด ๊ฒฝ์ฐ์ ์๊ฐ ๋ง๊ณ , ๊ธฐ๊ธฐ์ ๋ถ๋ด์ ์ค ์๋ ์์.
ํจ์จ์ ์ผ๋ก ๋งต์ ํด๋ฆฌ์ด ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ณ ์ํด๋ณผ ๊ฑฐ์.
์ด ๊ฒ์์์ ๋ํ๋ ์ค์ํ ๊ด์ฐฐ์ ์ด๋ค ํ ์ง์ ์์ ์ถ๋ฐํด์ ๋ค์ ๋์์ฌ ์ ์๋ ๊ทธ๋ฃน์ด ์กด์ฌํ๋ค๋ ๊ฑฐ์.
(๋นจ๊ฐ์ ๋๊ทธ๋ผ๋ฏธ๋ ์์ ์์น, ํ๋์ ์ฌ๊ฐํ์ ์ป์ด์ผํ ๋ชฉํ๋ฌผ)
๊ฐ๋ฅํ ๋งต ์ค ํ๋์ธ ๋ฐ, ์ด๋ก์์ผ๋ก ๋ ๊ฒฝ๋ก๋ค์ ๊ณ์ ์๋ฆฌ๊ฐ๋ฆฌํ ์ ์์. ์ด๋ฌํ ํํ๋ฅผ ๊ทธ๋ฃน์ด๋ผ๊ณ ๋งํ ๊ฑฐ์.
์ด๋ก์ ๋ง๊ณ ๋ ๋ณด๋ผ์์ผ๋ก ๋ ๊ทธ๋ฃน๋ ๊ณ์ ์๋ฆฌ๊ฐ๋ฆฌ ํ ์ ์์.
๋ณด๋ผ์์ผ๋ก ๋ ๊ทธ๋ฃน์์ ์๋ค๊ฐ ์ด๋ก์ ๊ทธ๋ฃน์ผ๋ก ์ด๋ํ ์๋ ์์.
ํ์ง๋ง ์ด๋ก์์ผ๋ก ๋ ๊ทธ๋ฃน์์ ๋ณด๋ผ์์ผ๋ก ๋ ๊ทธ๋ฃน์ผ๋ก๋ ์ด๋ํ ์ ์์.
๊ด์ฐฐํ ์ ์๋ ์ ์ ๊ทธ๋ฃน๋ค์ ์ด๋์ผ๋ก ๊ฒ์์ ํด๋ฆฌ์ดํ ์ ์๋ค๋ ๊ฑฐ์ผ.
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ฃน์์์๋ ๋ค์ ์ ์๋ฆฌ๋ก ๋์์ฌ ์ ์์ผ๋ฏ๋ก ๋ชจ๋ ๋ฐฉ๋ฌธํ๋ ๊ฒ ์ ์ผ ์ด๋์ด๊ณ .
์์ ๋งต์ ๋์ถฉ ์ด๋ ๊ฒ ๊ทธ๋ฃน์ ๋๋ ์ ์๊ณ , ํ์ฌ ์์์ (๋นจ๊ฐ์ ๋๊ทธ๋ผ๋ฏธ)์์ ์ถ๋ฐํ๋ฉด
๋ณด๋ผ์ ๊ทธ๋ฃน -> ํ๋์ ๊ทธ๋ฃน -> ์ฃผํฉ์ ๊ทธ๋ฃน -> ํ๋์ ๊ทธ๋ฃน
์ด ์์๋๋ก ๊ทธ๋ฃน์ ์ฎ๊ธฐ๋ฉด ๋งต์ ํด๋ฆฌ์ดํ ์ ์์.
๊ทธ๋ ๋ค๋ฉด ๋งต์ด ์ฃผ์ด์ง๋ค๋ฉด ์์์ ๋งํ ๊ทธ๋ฃน๋ค๋ก ๋๋์ด์ผ ๋จ.
์ด ๊ทธ๋ฃน์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์๊ฐ๋ณด๋ค ๊ฐ๋จํจ.
๋งต์ ๊ทธ๋ํ ์๋ฃ ๊ตฌ์กฐ๋ก ๋ง๋ค์ด ์ค ๋ค์ ๊ฐํ ์ฐ๊ฒฐ ์์ (SCC)๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ ์ฉํ๋ฉด ๋จ.
๊ตฌ์ฒด์ ์ผ๋ก ๋งํ์๋ฉด ๋งต์ ๊ฐ ์นธ๋ง๋ค ์ํ์ข์ฐ๋ก ๊ฐ ์ ์๋ ์นธ๋ค๋ก ๋จ๋ฐฉํฅ ๊ฐ์ ์ ์ด์ด์ฃผ๊ณ
SCC๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํ๋ฉด, ๊ฐ SCC๊ฐ ์์์ ๋งํ ๊ทธ๋ฃน์ด ๋๋ค๋ ๊ฑฐ์.
SCC์ ์ ์๋ฅผ ์ดํด๋ณด๋ฉด ์์์ ๋งํ ๊ทธ๋ฃน๊ณผ ๊ฐ์ ๋ป์ธ๊ฑธ ์ ์ ์์ ๊ฑฐ์.
๊ฐ ๊ทธ๋ฃน์ ํ๋์ ์ ์ ์ผ๋ก ์์ถํด์ ๋ณธ๋ค๋ฉด DAG(Directed acyclic graph)๊ฐ ๋๋ค๋ ์ฌ์ค์ ์ ์ ์์.
์ ์์ ๋ํ ๊ฒ์ ์๋ตํ๊ณ ์์์ ๋ดค๋ ์ํฉ์ ์๊ฐํ๋ฉด๋จ.
๋ณด๋ผ์ -> ์ด๋ก์์ ๊ฐ๋ฅํ์ง๋ง, ์ด๋ก์ -> ๋ณด๋ผ์์ ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฑฐ.
์ด๋ก์์ผ๋ก ์ด๋ํ ๋ค์ ์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก๋ ๋ค์ ๋ณด๋ผ์์ผ๋ก ์ด๋ํ ์ ์์.
๋ชฉํ๋ฌผ์ด ์ฌ๋ฌ๊ฐ ์๋ ์์ ๋ ๊ฐ์ ธ์ ๋ดค๋ ๋ฐ, ๋ณด๋ผ์, ์ฃผํฉ์, ์ฐ๋์ ๊ทธ๋ฃน์ ๋ฌด์กฐ๊ฑด ๋ฐฉ๋ฌธํด์ผ๋๋ค๋ ๊ฒ์ ์ ์ ์์.
์ด์ ๋ฌธ์ ๋ฅผ "DAG์์ ์์ ์ ์ ๊ณผ ๋ฌด์กฐ๊ฑด ๋ฐฉ๋ฌธํด์ผ๋๋ ์ ์ ์ด ์์ ๋, ์ด๋ฅผ ๋ง์กฑํ๋ ๊ฒฝ๋ก๊ฐ ์๋๊ฐ?"์ผ๋ก ํ์ํ ์ ์์.
์ด ๋ฌธ์ ๋ 2-SAT (2-Satisfiability Problem)์ผ๋ก ํด๊ฒฐํ ์ ์์.
๊ฐ ์ ์ ๋ง๋ค boolean ๋ณ์ x_i๋ฅผ ๋ฐฐ์ ํด์ค ๊ฑฐ์.
- ์์ ์ ์ ๊ณผ ๋ฌด์กฐ๊ฑด ๋ฐฉ๋ฌธํด์ผ๋๋ ์ ์ ์ ๋ฌด์กฐ๊ฑด true์ฌ์ผ๋จ.
- ์์ ์ ์ ์์ ๋๋ฌํ ์ ์๋ ์ ์ ์ ๋ฌด์กฐ๊ฑด false์ฌ์ผ๋จ.
- ์ด๋ค ๋ ์ ์ u, v๋ฅผ ํจ๊ป ๋ฐฉ๋ฌธํ ์ ์๋ ๊ฒฝ์ฐ !x_u || !x_v๋ฅผ ๋ง์กฑํด์ผ๋จ.
์ด ์กฐ๊ฑด์ ๋ง์กฑํ๊ฒ boolean ๋ณ์๋ฅผ ๋ฐฐ์ ํ ์ ์์ผ๋ฉด, ์ด ๋งต์ ํด๊ฒฐํ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ ๋ง์ด ๋จ.
์์ ํ์๊ฐ์ ๊ฒฝ์ฐ ์ง์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง์ง๋ง, ์ด ๋ฐฉ๋ฒ์ ๋คํญ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ ธ์ ํจ๋ฐฐ ๋น ๋ฆ.
์ด๊ฒ์ ์์ฉํ๋ฉด ์ค์ ํด๋ฆฌ์ด ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ ๊ตฌํ ์ ์์. ๋ค์ํ ๋ฐฉ๋ฒ์ด ์๊ฒ ์ง๋ง ๋๋ bfs + bitmask๋ฅผ ์ฌ์ฉ ํ์.
์ ๋ํฐ์์ ์ ์๋ํ๊ณ ์ธ์คํํฐ MapModel ์คํฌ๋ฆฝํธ๋ฅผ ํ์ธํ๋ฉด ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ๋ ๋์ด.
์์ค์ฝ๋๋
์์ ํ์ธํ ์ ์์.
์ฃผ์ด์ง ๋งต์ด ํด๋ฆฌ์ด ์ฌ๋ถ์, ํด๋ฆฌ์ด ๋ฐฉ๋ฒ์ ์ฐพ์์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ ์ฝ๋์.
์ต๊ทผ ์ด๋ถ์๋ง ์์ด์ ๊ฒ์๋ฌ ์ก๋๋ฐ ๋ค๋ค ํ๋ด์ ๊ฐ๋ฐํ์ ํ์ดํ
์ญ์ ๊ฐ๋ฐ์๋ ๋ฌ๋ผ ์ฝ