๐ ๋ฌธ์
ํ๋ ์ด์ด A์ ํ๋ ์ด์ด B๊ฐ ์๋ก ๊ฒ์์ ํฉ๋๋ค. ๋น์ ์ ์ด ๊ฒ์์ด ๋๋ ๋๊น์ง ์ ํ๋ ์ด์ด๊ฐ ์บ๋ฆญํฐ๋ฅผ ๋ช ๋ฒ ์์ง์ด๊ฒ ๋ ์ง ์์ธกํ๋ ค๊ณ ํฉ๋๋ค.
๊ฐ ํ๋ ์ด์ด๋ ์์ ์ ์บ๋ฆญํฐ ํ๋๋ฅผ ๋ณด๋ ์์ ์ฌ๋ ค๋๊ณ ๊ฒ์์ ์์ํฉ๋๋ค. ๊ฒ์ ๋ณด๋๋ 1x1 ํฌ๊ธฐ ์ ์ฌ๊ฐ ๊ฒฉ์๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๋ณด๋ ์์๋ ๋ฐํ์ด ์๋ ๋ถ๋ถ๊ณผ ์๋ ๋ถ๋ถ์ด ์์ต๋๋ค. ๋ฐํ์ด ์๋ ๊ณณ์๋ง ์บ๋ฆญํฐ๊ฐ ์์์ ์ ์์ผ๋ฉฐ, ์ฒ์ ์บ๋ฆญํฐ๋ฅผ ์ฌ๋ ค๋๋ ๊ณณ์ ํญ์ ๋ฐํ์ด ์๋ ๊ณณ์
๋๋ค. ์บ๋ฆญํฐ๋ ๋ฐํ์ด ์๋ ๊ณณ์ผ๋ก๋ง ์ด๋ํ ์ ์์ผ๋ฉฐ, ๋ณด๋ ๋ฐ์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค. ๋ฐ๊ณ ์๋ ๋ฐํ์ ๊ทธ ์์ ์๋ ์บ๋ฆญํฐ๊ฐ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ด๋ํ์ฌ ๋ค๋ฅธ ๋ฐํ์ ๋ฐ์๊ณผ ๋์์ ์ฌ๋ผ์ง๋๋ค. ์ ํ๋ ์ด์ด๋ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์๊ธฐ ์ฐจ๋ก์ ์์ ์ ์บ๋ฆญํฐ๋ฅผ ์ํ์ข์ฐ๋ก ์ธ์ ํ 4๊ฐ์ ์นธ ์ค์์ ๋ฐํ์ด ์๋ ์นธ์ผ๋ก ์ฎ๊ฒจ์ผ ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ 2๊ฐ์ง ์ํฉ์์ ํจ์์ ์น์๊ฐ ์ ํด์ง๋ฉฐ, ๊ฒ์์ด ์ข
๋ฃ๋ฉ๋๋ค.
- ์์ง์ผ ์ฐจ๋ก์ธ๋ฐ ์บ๋ฆญํฐ์ ์ํ์ข์ฐ ์ฃผ๋ณ 4์นธ์ด ๋ชจ๋ ๋ฐํ์ด ์๊ฑฐ๋ ๋ณด๋ ๋ฐ์ด๋ผ์ ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ, ํด๋น ์ฐจ๋ก ํ๋ ์ด์ด๋ ํจ๋ฐฐํฉ๋๋ค.
- ๋ ์บ๋ฆญํฐ๊ฐ ๊ฐ์ ๋ฐํ ์์ ์์ ๋, ์๋ ํ๋ ์ด์ด์ ์บ๋ฆญํฐ๊ฐ ๋ค๋ฅธ ๋ฐํ์ผ๋ก ์ด๋ํ์ฌ ์์ ์ ์บ๋ฆญํฐ๊ฐ ์์๋ ๋ฐํ์ด ์ฌ๋ผ์ง๊ฒ ๋๋ฉด ํจ๋ฐฐํฉ๋๋ค.
๊ฒ์์ ํญ์ ํ๋ ์ด์ด A๊ฐ ๋จผ์ ์์ํฉ๋๋ค. ์ ํ๋ ์ด์ด๋ ์ต์ ์ ํ๋ ์ด๋ฅผ ํฉ๋๋ค. ์ฆ, ์ด๊ธธ ์ ์๋ ํ๋ ์ด์ด๋ ์ต๋ํ ๋นจ๋ฆฌ ์น๋ฆฌํ๋๋ก ํ๋ ์ดํ๊ณ , ์ง ์๋ฐ์ ์๋ ํ๋ ์ด์ด๋ ์ต๋ํ ์ค๋ ๋ฒํฐ๋๋ก ํ๋ ์ดํฉ๋๋ค. '์ด๊ธธ ์ ์๋ ํ๋ ์ด์ด'๋ ์ค์๋ง ํ์ง ์๋๋ค๋ฉด ํญ์ ์ด๊ธฐ๋ ํ๋ ์ด์ด๋ฅผ ์๋ฏธํ๋ฉฐ, '์ง ์๋ฐ์ ์๋ ํ๋ ์ด์ด'๋ ์ต์ ์ ๋คํด๋ ์๋๊ฐ ์ค์ํ์ง ์์ผ๋ฉด ํญ์ ์ง ์๋ฐ์ ์๋ ํ๋ ์ด์ด๋ฅผ ์๋ฏธํฉ๋๋ค. ์ต๋ํ ์ค๋ ๋ฒํด๋ค๋ ๊ฒ์ ์ ํ๋ ์ด์ด๊ฐ ์บ๋ฆญํฐ๋ฅผ ์์ง์ด๋ ํ์๋ฅผ ์ต๋ํํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์๋ ๊ทธ๋ฆผ์ ์ด๊ธฐ ๋ณด๋์ ์ํ์ ๊ฐ ํ๋ ์ด์ด์ ์์น๋ฅผ ๋ํ๋ด๋ ์์์
๋๋ค.
์์ ๊ฐ์ ๊ฒฝ์ฐ, ํ๋ ์ด์ด A๋ ์ค์๋ง ํ์ง ์๋๋ค๋ฉด ํญ์ ์ด๊ธธ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ ์ด์ด A๋ ์ด๊ธธ ์ ์๋ ํ๋ ์ด์ด์ด๋ฉฐ, B๋ ์ง ์๋ฐ์ ์๋ ํ๋ ์ด์ด์
๋๋ค. ๋ค์์ A์ B๊ฐ ์ต์ ์ ํ๋ ์ด๋ฅผ ํ๋ ๊ณผ์ ์ ๋ํ๋
๋๋ค.
- ํ๋ ์ด์ด A๊ฐ ์ด๊ธฐ ์์น (1, 0)์์ (1, 1)๋ก ์ด๋ํฉ๋๋ค. ํ๋ ์ด์ด A๊ฐ (0, 0)์ด๋ (2, 0)์ผ๋ก ์ด๋ํ ๊ฒฝ์ฐ ์น๋ฆฌ๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ฌด์กฐ๊ฑด ์ด๊ธธ ๋ฐฉ๋ฒ์ด ์๋ (1, 1)๋ก ์ด๋ํฉ๋๋ค.
- ํ๋ ์ด์ด B๋ (1, 1)๋ก ์ด๋ํ ๊ฒฝ์ฐ, ๋ฐ๋ก ๋ค์ ์ฐจ๋ก์ A๊ฐ ์ ๋๋ ์๋ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฉด ๋ฐํ์ด ์์ด์ ธ ํจ๋ฐฐํ๊ฒ ๋ฉ๋๋ค. ์ง ์๋ฐ์ ์๋ ํ๋ ์ด์ด๋ ์ต๋ํ ์ค๋ ๋ฒํฐ๋๋ก ํ๋ ์ดํ๊ธฐ ๋๋ฌธ์ (1, 1)๋ก ์ด๋ํ์ง ์์ต๋๋ค. (1, 2)์์ ์์ชฝ ์นธ์ธ (0, 2)๋ก ์ด๋ํฉ๋๋ค.
- A๊ฐ (1, 1)์์ (0, 1)๋ก ์ด๋ํฉ๋๋ค.
- B์๊ฒ๋ ๋จ์ ์ ํ์ง๊ฐ (0, 1)๋ฐ์ ์์ต๋๋ค. ๋ฐ๋ผ์ (0, 2)์์ (0, 1)๋ก ์ด๋ํฉ๋๋ค.
- A๊ฐ (0, 1)์์ (0, 0)์ผ๋ก ์ด๋ํฉ๋๋ค. ์ด๋์ ์๋ฃํจ๊ณผ ๋์์ B๊ฐ ์์๋ (0, 1)์ ๋ฐํ์ด ์ฌ๋ผ์ง๋๋ค. B๊ฐ ํจ๋ฐฐํฉ๋๋ค.
- ๋ง์ฝ ๊ณผ์ 2์์ B๊ฐ ์๋์ชฝ ์นธ์ธ (2, 2)๋ก ์ด๋ํ๋๋ผ๋ A๋ (2, 1)๋ก ์ด๋ํ๋ฉด ๋ฉ๋๋ค. ์ดํ B๊ฐ (2, 1)๋ก ์ด๋, ๋ค์ ์ฐจ๋ก์ A๊ฐ (2, 0)์ผ๋ก ์ด๋ํ๋ฉด B๊ฐ ํจ๋ฐฐํฉ๋๋ค.
์ ์์์์ ์ ํ๋ ์ด์ด๊ฐ ์ต์ ์ ํ๋ ์ด๋ฅผ ํ์ ๊ฒฝ์ฐ, ์บ๋ฆญํฐ์ ์ด๋ ํ์ ํฉ์ 5์ ๋๋ค. ์ต์ ์ ํ๋ ์ด๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง์ผ ์ ์์ผ๋, ์ด๋ํ ํ์๋ ๋ชจ๋ 5๋ก ๊ฐ์ต๋๋ค.
๊ฒ์ ๋ณด๋์ ์ด๊ธฐ ์ํ๋ฅผ ๋ํ๋ด๋ 2์ฐจ์ ์ ์ ๋ฐฐ์ด board์ ํ๋ ์ด์ด A์ ์บ๋ฆญํฐ ์ด๊ธฐ ์์น๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด aloc, ํ๋ ์ด์ด B์ ์บ๋ฆญํฐ ์ด๊ธฐ ์์น๋ฅผ ๋ํ๋ด๋ ์ ์ ๋ฐฐ์ด bloc์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. ์ ํ๋ ์ด์ด๊ฐ ์ต์ ์ ํ๋ ์ด๋ฅผ ํ์ ๋, ๋ ์บ๋ฆญํฐ๊ฐ ์์ง์ธ ํ์์ ํฉ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- 1 ≤ board์ ์ธ๋ก ๊ธธ์ด ≤ 5
- 1 ≤ board์ ๊ฐ๋ก ๊ธธ์ด ≤ 5
- board์ ์์๋ 0 ๋๋ 1์
๋๋ค.
- 0์ ๋ฐํ์ด ์์์, 1์ ๋ฐํ์ด ์์์ ๋ํ๋ ๋๋ค.
- ๊ฒ์ ๋ณด๋์ ์ข์ธก ์๋จ ์ขํ๋ (0, 0), ์ฐ์ธก ํ๋จ ์ขํ๋ (board์ ์ธ๋ก ๊ธธ์ด - 1, board์ ๊ฐ๋ก ๊ธธ์ด - 1)์ ๋๋ค.
- aloc๊ณผ bloc์ ๊ฐ๊ฐ ํ๋ ์ด์ด A์ ์บ๋ฆญํฐ์ ํ๋ ์ด์ด B์ ์บ๋ฆญํฐ ์ด๊ธฐ ์์น๋ฅผ ๋ํ๋ด๋ ์ขํ๊ฐ์ด๋ฉฐ [r, c] ํํ์
๋๋ค.
- r์ ๋ช ๋ฒ์งธ ํ์ธ์ง๋ฅผ ๋ํ๋ ๋๋ค.
- 0 ≤ r < board์ ์ธ๋ก ๊ธธ์ด
- c๋ ๋ช ๋ฒ์งธ ์ด์ธ์ง๋ฅผ ๋ํ๋ ๋๋ค.
- 0 ≤ c < board์ ๊ฐ๋ก ๊ธธ์ด
- ์ด๊ธฐ ๋ณด๋์ aloc๊ณผ bloc ์์น๋ ํญ์ ๋ฐํ์ด ์๋ ๊ณณ์ ๋๋ค.
- aloc๊ณผ bloc์ด ๊ฐ์ ์ ์์ต๋๋ค.
- ์๋ ํ๋ ์ด์ด์ ์บ๋ฆญํฐ๊ฐ ์๋ ์นธ์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
[[1, 1, 1], [1, 1, 1], [1, 1, 1]] | [1, 0] | [1, 2] | 5 |
[[1, 1, 1], [1, 0, 1], [1, 1, 1]] | [1, 0] | [1, 2] | 4 |
[[1, 1, 1, 1, 1]] | [0, 0] | [0, 4] | 4 |
[[1]] | [0, 0] | [0, 0] | 0 |
โ๏ธ ํ์ด
board์ ํฌ๊ธฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํด๋ ๊ด์ฐฎ์ ๊ฒ์ด๋ผ๊ณ ํ๋จํ๊ณ DFS๋ฅผ ๋๋ ค ๋ฌธ์ ๋ฅผ ํ์๋ค.
๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์ฃผ์ํ ์ ์ด๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ด ์ด๊ธฐ๋ ๊ฒฝ์ฐ์๋ ์ด๊ธฐ๊ธฐ ์ํ ๊ฐ์ฅ ์ต์ ์ ์ ํ, ์ง๋ ๊ฒฝ์ฐ์๋ ์์ง์์ ์ต๋ํ ํ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ์ ๋ง์ฝ ์ด๋ค ํ ์ชฝ์ด ์ด๊ธฐ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ณ ์๋ค๊ณ ํ๋ฉด ์ด๊ธฐ๋ ์ฌ๋์ด ๊ฒ์์ ์ฃผ๋ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ณ ์ด๊ธฐ๋ ๊ฒฝ์ฐ์์๋ ์์ง์์ ์ต์ํํ๊ณ ์ง๋ ๊ฒฝ์ฐ์๋ ์ต๋ํํ ์ ์๋๋ก min, max๊ฐ์ ๊ตฌ๋ถํ์ฌ ๋ฐํํ๋ค.
DFS ํจ์๋ ์ฌ๊ทํ์์ผ๋ก ์๋์ ์์ ์ด ์์ง์ด๋ ๊ฒฝ์ฐ๋ฅผ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ๋๋ ธ๋ค. ๋จผ์ ์๊ธฐ ์์ ์ด ์์๋ ๋ฐํ์ด ์์ด์ง๋ ๊ฒฝ์ฐ๋ ์์ผ๋ฏ๋ก ํ์ฌ ์์๋ ์์น์ ๋ฐํ์ด 0์ด๋ผ๋ฉด ์ด๋ ์ง๋ค๋ ์๋ฏธ์ false์ 0์ ๋ฐํํด์ค๋ค.(์ด๊ธฐ๋ ๊ฒฝ์ฐ์ ์ง๋ ๊ฒฝ์ฐ์ ๋ฐํํด์ผ ํ๋ ๊ฐ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์)
์ฃผ๋ณ์ ๊ฐ ์ ์๋ ๋ฐํ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ํ์ธํ๋ฉฐ DFS๋ฅผ ์ฌ๊ทํธ์ถํ๋ค. ์ด๋ ์๋๋ฐฉ๊ณผ ๋์ ์ฐจ๋ก๊ฐ ๋ฐ๋๊ฒ ๋๊ณ ๋ง์ฝ ๊ฐ ์ ์๋ ๋ฐํ์ด ์๋ ๊ฒฝ์ฐ ์ง๋ ๊ฒฝ์ฐ์ด๋ฏ๋ก false์ 0์ ๋ฐํํ๋ค.
์ด ๊ฒฐ๊ณผ๋ฅผ ์์๋ก res๋ผ๋ ๋ฐฐ์ด์ ์ ์ฅํด๋๋๋ฐ ๋ชจ๋ ๊ฒฝ์ฐ์ค์์ ์ด๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๋ฉด ์ต์๊ฐ์ ๋ฐํํด์ผ ํ๊ณ ์๋ ๊ฒฝ์ฐ์๋ ์ ์ผ ํฐ๊ฐ์ ๋ฐํํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ๋ฐํํ ๋ ์๊ธฐ ์์ ์ด ์์ง์ธ ํ์๋ฅผ ๋ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ +1 ํด์คฌ๋ค.
์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด A ํ๋ ์ด์ด๊ฐ ๋จผ์ ๊ฒ์์ ์์ํ ๋ ์น๋ฆฌ์ฌ๋ถ์ ์์ง์ธ ํ์๋ฅผ ๊ณ์ฐํ ์ ์๊ณ ์์ง์ธ ํ์๋ฅผ ๋ฐํํ๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
โจ๏ธ ์ฝ๋
function solution(board, aloc, bloc) {
const dx = [-1, 0, 1, 0];
const dy = [0, 1, 0, -1];
function dfs(board, movePlayer, waitPlayer) {
const res = [];
const [x, y] = movePlayer;
if (!board[x][y]) return [false, 0];
board[x][y] = 0;
let isDontMove = true;
for (let k = 0; k < 4; k++) {
const nextX = x + dx[k];
const nextY = y + dy[k];
if (nextX < 0 || nextX >= board.length || nextY < 0 || nextY >= board[0].length) continue;
if (!board[nextX][nextY]) continue;
isDontMove = false;
res.push(dfs(board, waitPlayer, [nextX, nextY]));
}
board[x][y] = 1;
if (isDontMove) return [false, 0];
let canWin = false;
let max = 0;
let min = Infinity;
for (let r of res) {
const [isOpponentWin, cnt] = r;
if (!isOpponentWin) canWin = true;
if (!isOpponentWin) min = Math.min(min, cnt);
else max = Math.max(max, cnt);
}
return canWin ? [true, min + 1] : [false, max + 1];
}
const [_, cnt] = dfs(board, aloc, bloc);
return cnt;
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ๊ณต ์ด๋ ์๋ฎฌ๋ ์ด์ (0) | 2023.04.07 |
---|---|
[Algorithm] ๋ฑ์ฐ์ฝ์ค ์ ํ๊ธฐ (0) | 2023.04.06 |
[Algorithm] N์ผ๋ก ํํ (0) | 2023.04.04 |
[Algorithm] ๋ฐํํ๋ฉด ์ ๋ฆฌ (0) | 2023.04.03 |
[Algorithm] ๊ณผ์ ์งํํ๊ธฐ (0) | 2023.04.02 |