1. ๋ฌธ์ ์ค๋ช
ํด๊ฐ์ด์ฆ ๊ฒ์์ ๋ฐ๋ฅ ๋จ์ด์ ธ์
๋ฅผ ์๊ฐํ๋ฉด ๋๋ค.
ํ ๊ฐ์ง ๋ค๋ฅธ ์ ์ ํ๋์ ๋ฐํ์์ ๋ค๋ฅธ ๋ฐํ์ผ๋ก ์ด๋ํด์ผ์ง๋ง, ๊ธฐ์กด์ ๋ฐ๊ณ ์๋ ๋ฐํ์ด ์ฌ๋ผ์ง๋ค๋ ๊ฒ์ด๋ค.
๊ฒฝ๊ธฐ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
- 5*5 ์ดํ์ ๋ณด๋๊ฐ ์ฃผ์ด์ง๋ค. ํด๋น ๋ณด๋๋ ๋ฐ์ ์ ์๋ ๋ฐํ(1), ๋ฐํ์ด ์๋ ํ๊ณต(0)์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ๋ฌด์กฐ๊ฑด 2๋ช
์ ํ๋ ์ด์ด๋ง ์กด์ฌํ๋ค. ํ๋ ์ด์ด A์ ํ๋ ์ด์ด B๊ฐ ์๋ค.
๊ฐ ํ๋ ์ด์ด๋ ๊ฐ์์ turn์ ์ํ์ข์ฐ ์ฌ๋ฐฉ์ผ๋ก ํ ์นธ์ฉ๋ง ์ด๋ํ ์ ์๋ค.
ํ๋ ์ด์ด๊ฐ ์ด๋ํ ๊ฒฝ์ฐ, ๊ธฐ์กด์ ๋ฐ๊ณ ์๋ ๋ฐํ์ ์ฌ๋ผ์ง๊ณ ํ๊ณต(0)์ผ๋ก ๋ณํ๋ค. - ์น๋ฆฌ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
ํ player๊ฐ ํ๊ณต์ผ๋ก ๋๋ฌ์์ด๊ฑฐ๋, ๋๊ณ ์๋ ๋ฐํ์ด ์ฌ๋ผ์ง๋ฉด, ๋ฐ๋ํธ player๊ฐ ์ด๊ธด๋ค.
(๋ง์ฝ ํ๋ ์ด์ด A,B๊ฐ ๊ฐ์ ๋ฐํ์ ๋ฐ๊ณ ์๋ค๊ฐ A๊ฐ ๋ค๋ฅธ ์ชฝ์ผ๋ก ์ด๋ํ๋ฉด, ๊ฐ์ด ๋ฐ๊ณ ์๋ ๋ฐํ์ด ์ฌ๋ผ์ ธ B๋ ๋จ์ด์ง๊ณ ํ๋ฝํ๋ค.)
๋ ํ๋ ์ค์ํ ์ ์ ๋ชจ๋ ํ๋ ์ด์ด๊ฐ ์ด๊ธฐ๊ธฐ ์ํด ์ต์ ์ ๋คํ๋ค.
๋ผ๋ ๊ฒ์ด๋ค. ์ต์ ์ ๋คํ๋ค๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋ง์ฝ ํน์ ํ๋ ์ด์ด๊ฐ ์ด๊ธธ ์ ์๋ค๋ฉด, ์ด๊ธฐ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๊ธธ(๋ ํ๋ ์ด์ด ์์ง์ ์ต์ํ)์ ํํ๋ค.
๋ง์ฝ ํน์ ํ๋ ์ด์ด๊ฐ ์ง๋ ๊ฒฝ์ฐ์ ์ ๋ฐ์ ์๋ค๋ฉด ์ต๋ํ ์๊ฐ์ ๋๋ ๊ธธ(๋ ํ๋ ์ด์ด ์์ง์ ์ต๋ํ)์ ํํ๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ ํ๋ ์ด์ด๊ฐ ์ต์ ์ ํ๋ ์ด๋ฅผ ํ์ ๋ ๋ ์บ๋ฆญํฐ๊ฐ ์์ง์ธ ์๋ฅผ ๊ตฌํ์ฌ๋ผ
2. ํธ๋ ๋ฐฉ์
KEY WORD
: miniMax Algorithm
, DFS
ํด๋น ๋ฌธ์ ๋ ํ์ด๋ฅผ ๋ดค๋ค. ํ์ด๋ฅผ ๋ณด๊ฒ ํ ๊ฐ์ฅ ํฐ ์ด์ ๋, ๊ฐ์ ์ต์ ์ ํ๋ ์ด๋ฅผ ํ๋ค.
๋ฅผ '์ด๋ป๊ฒ ๊ตฌํํด์ผํ ์ง ๊ฐ์ด ์กํ์ง ์์์' ์ด๋ค.
A,B ํน์ ํ๋ ์ด์ด ์ค ํ ๋ช
์ ์์ ์๊ฒ ์ด๊ธธ ๊ฒฝ์ฐ์ ์๊ฐ ์๋ค๋ ๊ฒ์ ๊ฒ์ ์์๋ถํฐ ์์์, ๊ทธ ์๋๋ก ๊ฒ์์ ์งํํด์ผ ํ ๊ฒ์ด๊ณ , ๋ฐ๋ํธ ํ๋ ์ด์ด๋ ํน์ ์์ ๋ถํฐ ์์ ์๊ฒ ์ง๋ ๊ฒฝ์ฐ์ ์๋ฐ์ ์๋ค๋ ๊ฒ์ ์๊ณ , ์ต๋ํ ์๊ฐ์ ๋์ด์ผ ํ๋ค. ์ด๊ฑธ ์ด๋ป๊ฒ ๋ํ๋ด์ผ ํ๋์ง ์ ๋ง ๋ง๋งํ๋ค. ์ด ๋ต๋ตํจ์ minMax algorithm
์ ๊ณต๋ถํ๋ฉด์ ๋ง์ด ํด์๋์๋ค. ํน์ minMax algorithm
์ ์ด๋ฏธ ์๋ค๋ฉด (1)๋ฒ์ ๊ฑด๋ ๋ฐ๊ณ ๋ค์ ๋ถํฐ ๋ด๋ผ
(1) MiniMax algorithm
ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ๋ ๋ช
์ ํ๋ ์ด์ด๊ฐ ์งํํ๊ณ ์นํจ๊ฐ ๋ช
ํํ ๊ฐ๋ฆฌ๋ ๊ฒ์(Zero-sum Game)์์ ํ์ฉํ ์ ์๋, ์์ง์ ์ต์ ํ
์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์์ง์ ์ต์ ํ๋ ์๋๋ฐฉ์ด ํํ ํ๋ ์ด์ ์ํฅ๋ ฅ์ ์ต์ํํ๊ณ , ๋ด ์์ง์์ ์ํฅ๋ ฅ์ ๊ทน๋ํํ์ฌ ์น๋ฆฌ ํ๋ฅ ์ ๋์ด๋ ๊ฒ
์ ์๋ฏธํ๋ค. ์ด์ธ๋๊ณผ ๋ฐ๋์ ๋๋ ์ํ๊ณ ๋ฅผ ์๊ฐํ๋ฉด ์ดํด๊ฐ ํธํ๊ฒ ๋ค. (๋ฌผ๋ก ์ํ๊ณ ๋ MCTS๋ผ๋ ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ๋ค...)
Zero-sum ๊ฒ์์ ์๋ก ๋ค์ด ์ค๋ช ํ๊ฒ ๋ค. Zero-sum ๊ฒ์์๋ ์ฒด์ค, ๋ฐ๋ ๋ฑ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง, ๊ทธ ์ค์์ ๊ฒฝ์ฐ์ ์๊ฐ ์๊ณ ์ฌ์ด tic-tac-toe๋ผ๋ ๊ฒ์์ ์๋ก ๋ค๊ฒ ๋ค. ํฑํํ ๋ ๋์ด ํ๋ ๋น๊ณ ๊ฐ์ ๊ฒ์์ด๋ค. ์ด๋ฅผ ๋ชจ๋ฅด์๋ ๋ถ๋ค์ ์ํด, ๊ฒ์ ์ค๋ช ๋งํฌ๋ฅผ ๋จ๊ธฐ๊ฒ ๋ค.
์๊ณ ๋ฆฌ์ฆ์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋๋ฅผ A, ์๋๋ฐฉ์ B๋ผ๊ณ ๋๊ฒ ๋ค.
- DFS๋ก ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ๋ณผ ๊ฒ์ด๋ค. ํ์ง๋ง DFS์ ๋ค๋ฅธ ์ ์ ์ฌ๊ท๋ฅผ
DEPTH๋ง๋ค A์ ์ ์ฅ๊ณผ B์ ์ ์ฅ์ ๋ฒ๊ฐ์ ์ทจํ๋ค
๋ ๊ฒ์ด๋ค.
(์๋ฅผ ๋ค์ด ํฑํํ ํ๋ ์ด๋ฅผ ์ฌ๊ท๋ก ๋ํ๋ธ๋ค๋ฉด,
depth1 : A๊ฐ ๋๊ทธ๋ผ๋ฏธ๋ฅผ ํ ์์น์ ๊ทธ๋ฆฐ๋ค.
depth2: B๊ฐ ์์คํ๋ฅผ ํ ์์น์ ๊ทธ๋ฆฐ๋ค.) ์ด ์ฌ๊ท๋ฅผ ๊ฒ์์ด ๊ฒฐํ๋ ๋๊น์ง ๋ฐ๋ณตํ๋ค. - ํ์ฌ ๋ด๊ฐ A์ด๋ฏ๋ก, A ์ ์ฅ์ ์ฌ๊ท์์๋ DFS branch(๊ฒฝ์ฐ์ ์) ์ค A๊ฐ ์น๋ฆฌํ ์ต์ ์ ์๋ฅผ ๊ณจ๋ผ์ผ ํ๋ค.
- B์ ์ ์ฅ ์ฌ๊ท์์๋ DFS branch ์ค A๊ฐ ํจ๋ฐฐํ ํ๋ฅ ์ด ์ ์ผ ๋์ ์๋ฅผ ๊ณจ๋ผ์ผ ํ๋ค.
- ์ด๋ฐ ์์ผ๋ก loop back์ ํ๋ฉด, DFS์ root์์๋
B๊ฐ ์ต์ ์ ํ๋ ์ด๋ฅผ ํ์ ๋ A๊ฐ ๊ณ ๋ฅผ ์ ์๋ ํ์ฌ ์ต์ ์ ์
๊ฐ ๋ฌด์์ธ์ง ๋์จ๋ค.
๊ธ๋ง์ผ๋ก ์ด๋ ค์ฐ๋ ๊ทธ๋ฆผ์ผ๋ก ์๋ฅผ ๋ค์ด ๋ณด๊ฒ ๋ค.
๋จผ์ ๋ค์๊ณผ ๊ฐ์ด ๊ท์น์ ์ธ์๋ณด์.
- A๊ฐ X๋ฅผ ๊ทธ๋ฆฌ๊ณ , B๊ฐ O๋ฅผ ๊ทธ๋ฆฐ๋ค.
- ์ต์ข ์ ์ผ๋ก A๊ฐ ์ด๊ธฐ๋ ๊ฒฝ์ฐ์ ์๋ฉด 1์, ๋น๊ธฐ๋ฉด 0์ ์ง๋ฉด -1์ ๋ฐํํ๋ค.
๊ฒฝ์ฐ์ ์๊ฐ ๋๋ฌด ๋ง์์, ๊ฒ์์ ์ด๋ ์ ๋ ์งํํ ์ํฉ์ผ๋ก ๊ฐ์ ํ๋ค. ์ด 3 turn์ด ๋จ์๊ณ , A-> B -> A ๋ก ์ด๋ฃจ์ด์ง๋ค.
- ์ผ๋จ ๋ชจ๋ ๊ฒฝ์ฐ์ DFS๊ฐ ์ด๋ฃจ์ด์ ธ์,
DEPTH 3
์์ ๋์ฌ ์ ์๋ ๋ชจ๋ ๊ฒฐ๊ณผ๊ฐ ๋์์๋ค. DEPTH 3
์์๋ ๋์ฌ ์ ์๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋ชจ๋ ํ ๊ฐ์ง๋ผ์, ๋ฐ์ง ํ์ ์์ด ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๋ฉด ๋๋ค.DEPTH 2
๋ B์ Turn์ด๋ค. B๊ฐ ๋๊ทธ๋ผ๋ฏธ๋ฅผ ๊ทธ๋ฆฐ ์์น์ ๋ฐ๋ผ ๋น๊ธฐ๊ฑฐ๋ ์ด๊ธฐ๊ฑฐ๋ ๊ฒฐ์ ๋จ์ ์ ์ ์๋ค.
์ด๋, B๊ฐ A๋ฅผ ์ด๊ธธ ๊ฒฝ์ฐ์ ์๋ ์์ผ๋ฏ๋ก, ์ต์ ์ ํ๋ ์ด๋ฅผ ์ํด, A๋ ๋น๊ธฐ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ด์ DEPTH๋ก ๋ฐํํ๋ค.
(์ธ๋ฒ์งธ branch๋ B๊ฐ ๋ญํ๋ ์ง๋ค. ๋ฐ๋ผ์ ๊ทธ๋๋ก 1์ ๋ฐํํ๋ค.)DEPTH 1
์ A์ turn์ด๋ค. A๊ฐ Xํ๋ฅผ ๊ทธ๋ฆฌ๋ ์์น์ ๋ฐ๋ผ ๋น๊ธฐ๊ฑฐ๋ ์ด๊ธด๋ค. A์๊ฒ ์ต์ ์ ์๋ฅผ ์ ํํด์ผ ํ๋ฏ๋ก, 3๋ฒ์งธ branch๋ฅผ ๊ณ ๋ฅธ๋ค. A๊ฐ ์ธ๋ฒ์งธ branch๋ฅผ ๊ณ ๋ฅด๋ ์๊ฐ B๋ ํ์ ์ ์ผ๋ก ์ง๋ค.
์ด์ ์ด๊ฒ์ ๋ฌธ์ ์ ์ ์ฉํด๋ณด์.
(2) ๋ฌธ์ ์ ๊ทผ ๋ฐฉ์
์ด ๊ทผ๋ฐ? minMax๋ ๋(A)์ ์๋๋ฐฉ(B)์ด ์ ํด์ ธ ์๊ณ , ๋ด๊ฐ ์ด๊ธฐ๋ ์ต์ ์ ์๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ฉด, ํด๋น ๋ฌธ์ ์์๋ A์ B ์ค ๋ ์ค ๋๊ฐ ์ด๊ฒจ๋ ๋๊ณ , ๋จ์ง ์ต์ ์ ํ๋ ์ด๋ฅผ ํ์ ๋ turn ํ์๋ฅผ ์ธ๋ฉด ๋์ง ์๋์?
๋ง๋ค ๊ทธ๋์ ์ด์ง ๋ณ๊ฒฝ ํด์ผํ๋ค.
๋ชจ๋ ์ต์ ์ ํ๋ ์ด๋ฅผ ํ๋ค๋ฅผ ๊ตฌํํ๊ธฐ ์ํด A์ ์ฐจ๋ก์ด๋ , B์ ์ฐจ๋ก์ด๋ ๊ฐ depth ๋ณ ์ฆ ์์ ์ turn์ ์์ ์ด ์ด๊ธธ ์ ์๋์ง ํ์ธํ๊ณ , ํ๋ํ๋๋ก ๊ตฌํํ๋ค.
๋ฐ๋ผ์ ์์ ์ turn์ ๋ ์ ์๋ ๊ฒฝ์ฐ์ ์ ์ค ์ด๊ธฐ๋ ์๊ฐ ํ๋๋ผ๋ฉด ๊ทธ๊ฒ์ ์ ํํ๋ค.
์ด๊ธฐ๋ ์๊ฐ ์ฌ๋ฌ ๊ฐ๋ผ๋ฉด, ๊ทธ ์ค์์ turn ์๊ฐ ๊ฐ์ฅ ์งง์ ๊ฒ์ ์ ํํ๋ค.
๋ชจ๋ ์ง๋ ์๋ผ๋ฉด, ๊ทธ ์ค์์ turn ์๊ฐ ๊ฐ์ฅ ๊ธด ๊ฒ์ ์ ํํ๋ค.
๊ตฌํ ๋! ์ด์ ์ฝ๋๋ฅผ ๋ณด๋ฌ ๊ฐ๋ณผใฒ...
๐ค ์ด๋ป๊ฒ ์๊ธฐ๊ฐ ์ด๊ธธ์ง ์ง์ง๋ฅผ ์๋๋ฐ์?
์ค์ํ ๊ฒ์ ์ค๋ช
์ํ๋ค.
๊ฐ depth์์ ์์ ์ด ์ด๊ธธ์ง ์ง์ง ์๋ ๊ฒ์ ํ depth์์ ๋์ฌ ์ ์๋ ๊ฐ branch์์ ์์๋ turn ์๊ฐ ์ง์์ธ๊ฐ, ํ์์ธ๊ฐ ํ์ธํ๋ ๊ฒ
์ด๋ค.
์ด๋ค ํ๋ ์ด์ด๊ฐ ์ง๋ค๋ฉด, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์์ ์ ํด์ ํ์ธํ ์ ์๋ค.
๋ ์ด์ ๊ฐ ๊ณณ์ด ์๋์ง ์ฌ๋ถ, ์์ ์ ๋ฐํ์ด ์ฌ๋ผ์ง์ง ์ฌ๋ถ๋ ์์ ์ depth์์ ํ์์ ํด์ผ์ง ํ์ธ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์์ ์ turn์ ์ก๋ค๋ฉด turn ์๋ ๋ฌด์กฐ๊ฑด ์ง์
์ด๋ค!!
์๋ฅผ ๋ค์ด A -> B -> A(๊ฒฐ๊ณผ: A ํจ๋ฐฐ), A-> B -> A -> B -> A(๊ฒฐ๊ณผ: A ํจ๋ฐฐ) ๋ฑ์ด ์๋ค.
ํ์ฌ ์์ฌ ํ๋จ์ ํด์ผํ๋ ์์ ์ depth(์์ ์์์ ์ฒ์ A)์ ์ ์ธํ๊ณ ๋ด๋ผ, ๋ชจ๋ 2, 4... turn ์๊ฐ ์ง์๋ค.
๋ฐ๋ผ์ ํ Depth์์ ์งํํ ๊ฒฝ์ฐ์ ์(branch) ๊ฒฐ๊ณผ๊ฐ ์ง์์ด๋ฉด, ์์ ์ ํจ๋ฐฐ
, ๋ฐ๋๋ก ํ์์ด๋ฉด ์๋ํธ ์ฐจ๋ก์์ ์๋ํธ์ด ๋ ์ด์ ๊ฐ ๊ณณ์ด ์๊ฑฐ๋ ๋ฐํ์ด ์ฌ๋ผ์ ธ ๋จ์ด์ ธ ๊ฒ์์ด ๋๋ฌ์์ ์๋ฏธํ๊ธฐ ์์ ์ ์น๋ฆฌ
์ด๋ค!
์ด๋ฅผ ํ์ฉํ๋ค.
- branch ๊ฒฐ๊ณผ ์ค ํ๋๋ผ๋ ํ์์ด๋ฉด ๊ทธ ๋ ์์ ์ ํ (์ด๊ธฐ๋ ๊ฒ ์ต์ ์ ํ๋ ์ด)
- branch ๊ฒฐ๊ณผ๊ฐ ๋ชจ๋ ์ง์์ด๋ฉด ์ต๋๊ฐ์ ์ ํ (์ด์งํผ ์ง ๋ ์๊ฐ์ ์ ์ผ ๋ง์ด ๋๋ ๊ฒ ์ต์ ์ ํ๋ ์ด)
- branch ๊ฒฐ๊ณผ๊ฐ ๋ชจ๋ ํ์์ด๋ฉด ์ต์๊ฐ์ ์ ํ (์ด์งํผ ์ด๊ธธ ๋ turn ์ ์ต์ํ๊ฐ ์ต์ ์ ํ๋ ์ด)
๋ค์์ ๋ด๊ฐ ์์ ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ๊ทธ๋ฆฐ ๊ฒ์ด๋ค. ์ดํด๊ฐ ์๋๋ฉด ํ ๋ฒ ๊ทธ๋ ค๋ณด์. ๋๋ ๋น์ต ์ดํด๊ฐ ์๋๋ค๊ฐ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ์ดํด๊ฐ ๋์๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํ๋ ์ด์ด๋ ์์ชฝ ๋ชจ๋ ์ต์ ์ ํ๋ ์ด๋ง ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์ ์กฐ๊ฑด์ ์งํค๋ ๊ฒ์ด๋ค. ์ด์ ์ฝ๋ ํ๋ํ๋ ๋ถ์ํด๋ณด์.
3. ์ฝ๋ ๋ถ์
class Solution {
// 0. ์ฌ๋ฐฉํ์ ๋ฐฐ์ด, ๋ฐฉ๋ฌธ๋ฐฐ์ด, ์ด๊ธฐ ๋ฐํ ์ํ ๋ฐฐ์ด -> 5๊ฐ๊ฐ ์ต๋๋๊น ๋ฐ๋ก ์ ์ธํด์คฌ์ต๋๋ค. + ํ๊ณผ ์ด
int [][] dir = {{-1,0},{0,1},{1,0},{0,-1}};
boolean [][] vis = new boolean [5][5];
int [][] block = new int [5][5];
int r,c;
public int solution(int[][] board, int[] aloc, int[] bloc) {
r = board.length; c = board[0].length;
// 1. ์ด๊ธฐ ๋ฐํ ์ํ ์
๋ ฅ ๋ฐ๊ธฐ
for(int i = 0; i < r; i++){
for(int j = 0; j < c; j++){
block[i][j] = board[i][j];
}
}
return minMax(aloc[0], aloc[1], bloc[0], bloc[1]);
}
// 2. ๋ฌธ์ ์ฉ ์ฌ๊ทํจ์
public int minMax (int curY, int curX, int opY, int opX) {
// ๋ฐํ๊ฐ
int ret = 0;
// (1) ๋ง์ฝ ํ์ฌ ๋ฐ๊ณ ์๋ ๋ฐํ์ด ์ฌ๋ผ์ก์ผ๋ฉด ๊ฒ์ ๋์ด๋๊น ๋ฐ๋ก ๋ฐํ
if(vis[curY][curX]) return 0;
// (2) ์ฌ๋ฐฉํ์
for(int i = 0; i < 4; i++){
int ny = curY + dir[i][0];
int nx = curX + dir[i][1];
// ๋ฒ์๋ฅผ ๋์ด๊ฐ๊ฑฐ๋, ์ด๋ฏธ ๋ฐฉ๋ฌธํ๊ฑฐ๋ ๋ฒฝ์ธ ๊ฒฝ์ฐ continue
if(OOB(ny,nx) || vis[ny][nx] || block[ny][nx] == 0) continue;
// ํ์ฌ ๋ฐ๊ณ ์๋ ๋ฐํ์ ํ๊ณต์ผ๋ก ๋ฐ๊พธ๊ณ , ์ฌ๊ท
vis[curY][curX] = true;
// ํ์ฌ turn์์ ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ์ ์ค ํ๋๋ก ๊ฐ๋ณด๋ ๊ฒ
int pos = minMax(opY,opX,ny,nx) + 1;
// ํด๋น ๋ถ๊ธฐ ํ์ ๋ง์น๋ฉด ํ ๋ฐํ์ ์๋ ์ํ๋ก ๊ณ ๋ฅด๊ธฐ
vis[curY][curX] = false;
// ret์ ์ด์ ๊น์ง ๋ชจ๋ ๋ถ๊ธฐ์ ๊ฒฐ๊ณผ๊ฐ ์ค ์ต์ ์ ํด
// val์ ํ์ฌ์ ํด ์
๋๋ค.
// ํ์ฌ๊น์ง ๋ชจ๋ ๋ถ๊ธฐ๊ฐ ํจ๋ฐฐ์๋๋ฐ, ํ ๋ถ๊ธฐ๊ฐ ์น๋ฆฌ์ธ ๊ฒฝ์ฐ, ์น๋ฆฌ ๋ถ๊ธฐ ์ ํ
if(ret%2 == 0 && pos%2 == 1) ret = pos;
// ํ์ฌ๊น์ง ๋ชจ๋ ๋ถ๊ธฐ๊ฐ ํจ๋ฐฐ์๋๋ฐ, ํ ๋ถ๊ธฐ๋ ํจ๋ฐฐ์ธ ๊ฒฝ์ฐ, ๊ฐ์ฅ turn ์ ๊ธด ๊ฑฐ ์ ํ
else if(ret%2 == 0 && pos%2 == 0) ret = Math.max(ret,pos);
// ํ์ฌ๊น์ง ๋ชจ๋ ๋ถ๊ธฐ๊ฐ ์น๋ฆฌ์๋๋ฐ, ํ ๋ถ๊ธฐ๋ ์น๋ฆฌ์ธ ๊ฒฝ์ฐ, ๊ฐ์ฅ turn ์ ์งง์ ๊ฒ ์ ํ
else if(ret%2 == 1 && pos%2 == 1) ret = Math.min(ret,pos);
}
return ret;
}
// Out of Bound ์ก์ด
public boolean OOB (int nowY, int nowX){
return (nowY < 0 || nowX < 0 || nowY >=r || nowX >= c);
}
}
4. ํ๊ธฐ
์ด๊ฑฐ ํฌ๋ฌ๋ฌธํญ ์๋๋๊น? ๋๋ฌด ์ด๋ ต๋ค์.
์ ๋ 100% ์ดํดํ๊ธฐ๊น์ง ํ๋ฃจ ๊ฑธ๋ ธ์ต๋๋ค. ์ ์ฒ๋ผ ์ค๋ ๊ฑธ๋ฆฐ ์ฌ๋๋ ์์ผ๋, ํน์ ํ์ด ๋ดค๋ค๊ณ ์ฃผ๋
๋ค์ง ๋ง์๊ณ ํ์ดํ
ํฉ์๋ค...