๊ฐœ๋ฐœ ์ผ์ง€ 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 ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™•์ธํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋„ ๋‚˜์˜ด.


์†Œ์Šค์ฝ”๋“œ๋Š”

https://ideone.com/gmXcJf

์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.

์ฃผ์–ด์ง„ ๋งต์ด ํด๋ฆฌ์–ด ์—ฌ๋ถ€์™€, ํด๋ฆฌ์–ด ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ์ž„.


์ตœ๊ทผ ์ด๋ถˆ์—๋งŒ ์žˆ์–ด์„œ ๊ฒŒ์„๋Ÿฌ ์กŒ๋Š”๋ฐ ๋‹ค๋“ค ํž˜๋‚ด์„œ ๊ฐœ๋ฐœํ•˜์ž ํŒŒ์ดํŒ