

๋ณธ ๋ฌธ์ ๋ ์๋ ๋ค์ํ ๋ธ๋ก๊ทธ๋ค์ ์ฐธ๊ณ ํด์ ๋ชจ๋ ์ถ์ฒ๋ฅผ ๋จ๊ธฐ๊ธฐ ์ด๋ ค์ด ์ ์ ์ดํดํด์ฃผ์ญ์์ค..ใ ใ 

๊ฑด์คํ์ฌ์ ์ค๊ณ์ฌ์ธ ์ฃ ๋ฅด๋๋ ๊ณ ๊ฐ์ฌ๋ก๋ถํฐ ์๋์ฐจ ๊ฒฝ์ฃผ๋ก ๊ฑด์ค์ ํ์ํ ๊ฒฌ์ ์ ์๋ขฐ๋ฐ์์ต๋๋ค.
์ ๊ณต๋ ๊ฒฝ์ฃผ๋ก ์ค๊ณ ๋๋ฉด์ ๋ฐ๋ฅด๋ฉด ๊ฒฝ์ฃผ๋ก ๋ถ์ง๋ N x N ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ๊ฒฉ์ ํํ์ด๋ฉฐ ๊ฐ ๊ฒฉ์๋ 1 x 1 ํฌ๊ธฐ์
๋๋ค.
์ค๊ณ ๋๋ฉด์๋ ๊ฐ ๊ฒฉ์์ ์นธ์ 0 ๋๋ 1 ๋ก ์ฑ์์ ธ ์์ผ๋ฉฐ, 0์ ์นธ์ด ๋น์ด ์์์ 1์ ํด๋น ์นธ์ด ๋ฒฝ์ผ๋ก ์ฑ์์ ธ ์์์ ๋ํ๋
๋๋ค.
๊ฒฝ์ฃผ๋ก์ ์ถ๋ฐ์ ์ (0, 0) ์นธ(์ข์ธก ์๋จ)์ด๋ฉฐ, ๋์ฐฉ์ ์ (N-1, N-1) ์นธ(์ฐ์ธก ํ๋จ)์
๋๋ค. ์ฃ ๋ฅด๋๋ ์ถ๋ฐ์ ์ธ (0, 0) ์นธ์์ ์ถ๋ฐํ ์๋์ฐจ๊ฐ ๋์ฐฉ์ ์ธ (N-1, N-1) ์นธ๊น์ง ๋ฌด์ฌํ ๋๋ฌํ  ์ ์๊ฒ ์ค๊ฐ์ ๋๊ธฐ์ง ์๋๋ก ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํด์ผ ํฉ๋๋ค.
๊ฒฝ์ฃผ๋ก๋ ์, ํ, ์ข, ์ฐ๋ก ์ธ์ ํ ๋ ๋น ์นธ์ ์ฐ๊ฒฐํ์ฌ ๊ฑด์คํ  ์ ์์ผ๋ฉฐ, ๋ฒฝ์ด ์๋ ์นธ์๋ ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ  ์ ์์ต๋๋ค.
์ด๋, ์ธ์ ํ ๋ ๋น ์นธ์ ์ํ ๋๋ ์ข์ฐ๋ก ์ฐ๊ฒฐํ ๊ฒฝ์ฃผ๋ก๋ฅผ ์ง์  ๋๋ก ๋ผ๊ณ  ํฉ๋๋ค.
๋ํ ๋ ์ง์  ๋๋ก๊ฐ ์๋ก ์ง๊ฐ์ผ๋ก ๋ง๋๋ ์ง์ ์ ์ฝ๋ ๋ผ๊ณ  ๋ถ๋ฆ
๋๋ค.
๊ฑด์ค ๋น์ฉ์ ๊ณ์ฐํด ๋ณด๋ ์ง์  ๋๋ก ํ๋๋ฅผ ๋ง๋ค ๋๋ 100์์ด ์์๋๋ฉฐ, ์ฝ๋๋ฅผ ํ๋ ๋ง๋ค ๋๋ 500์์ด ์ถ๊ฐ๋ก ๋ญ๋๋ค.
์ฃ ๋ฅด๋๋ ๊ฒฌ์ ์ ์์ฑ์ ์ํด ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋ ๋ฐ ํ์ํ ์ต์ ๋น์ฉ์ ๊ณ์ฐํด์ผ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์๋ ๊ทธ๋ฆผ์ ์ง์  ๋๋ก 6๊ฐ์ ์ฝ๋ 4๊ฐ๋ก ๊ตฌ์ฑ๋ ์์์ ๊ฒฝ์ฃผ๋ก ์์์ด๋ฉฐ, ๊ฑด์ค ๋น์ฉ์ 6 x 100 + 4 x 500 = 2600์ ์
๋๋ค.

๋ ๋ค๋ฅธ ์๋ก, ์๋ ๊ทธ๋ฆผ์ ์ง์  ๋๋ก 4๊ฐ์ ์ฝ๋ 1๊ฐ๋ก ๊ตฌ์ฑ๋ ๊ฒฝ์ฃผ๋ก์ด๋ฉฐ, ๊ฑด์ค ๋น์ฉ์ 4 x 100 + 1 x 500 = 900์ ์
๋๋ค.

๋๋ฉด์ ์ํ(0์ ๋น์ด ์์, 1์ ๋ฒฝ)์ ๋ํ๋ด๋ 2์ฐจ์ ๋ฐฐ์ด board๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋๋ฐ ํ์ํ ์ต์ ๋น์ฉ์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
| board | result | 
|---|---|
| [[0,0,0],[0,0,0],[0,0,0]] | 900 | 
| [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] | 3800 | 
| [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] | 2100 | 
| [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[0,1,0,0,0,1],[0,0,0,0,0,0]] | 3200 | 
์ ์ถ๋ ฅ ์#1
๋ณธ๋ฌธ์ ์์์ ๊ฐ์ต๋๋ค.
์ ์ถ๋ ฅ ์#2

์์ ๊ฐ์ด ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋ฉด ์ง์  ๋๋ก 18๊ฐ, ์ฝ๋ 4๊ฐ๋ก ์ด 3800์์ด ๋ญ๋๋ค.
์ ์ถ๋ ฅ ์#3

์์ ๊ฐ์ด ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋ฉด ์ง์  ๋๋ก 6๊ฐ, ์ฝ๋ 3๊ฐ๋ก ์ด 2100์์ด ๋ญ๋๋ค.
๋ถ์์ ๊ฒฝ๋ก์ ๊ฐ์ด ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋ฉด ์ง์  ๋๋ก 12๊ฐ, ์ฝ๋ 4๊ฐ๋ก ์ด 3200์์ด ๋ญ๋๋ค.
๋ง์ฝ, ํ๋์ ๊ฒฝ๋ก์ ๊ฐ์ด ๊ฒฝ์ฃผ๋ก๋ฅผ ๊ฑด์คํ๋ค๋ฉด ์ง์  ๋๋ก 10๊ฐ, ์ฝ๋ 5๊ฐ๋ก ์ด 3500์์ด ๋ค๋ฉฐ, ๋ ๋ง์ ๋น์ฉ์ด ๋ญ๋๋ค.
โป ๊ณต์ง - 2021๋  8์ 30์ผ ํ ์คํธ์ผ์ด์ค๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
์ ๋ง ํ์ด๊ฐ ๋ํดํ ๋ฌธ์ ์ด๋ค. ๋ณธ๋ฌธ์์ ์๊ฐ๋ ๋ฐ์ ๊ฐ์ด 2021๋
 8์ 30์ผ์ ํ
์คํธ์ผ์ด์ค๊ฐ ์ถ๊ฐ๋์๋๋ฐ, ํด๋น ์ผ์ด์ค๊ฐ ๋ง์ด ์
๋ํ ํธ์ด๋ค.
๋ฌธ์ ์์ ๋งํ๋ฏ์ด, ๋ฐฉํฅ์ด ๋ฌ๋ผ์ง ๋ ์ฝ๋์ 600์์ด ์๋ชจ๋๋๋ฐ, ์ต๋จ ๊ฑฐ๋ฆฌ+๋ฐฉํฅ๊น์ง ์๊ฐํด์ผํ๊ธฐ ๋๋ฌธ์ธ๋ฐ ํด๋น ์ผ์ด์ค๊ฐ ์ถ๊ฐ๋๊ณ ์ฐธ๊ณ ํ ๋งํ ๋ธ๋ก๊ทธ๋ค์ ํ์ด๋ ๋ชจ๋ ์ค๋ต์ผ๋ก ์ฒ๋ฆฌ๋จ.
๋ฌผ๋ก ์๋ ํ์ด๋ง์  ๋ง์ง๋ง ํ์ด๋ ์คํจํ์ง๋ง ๊ฐ์ฅ ์ดํดํ๊ธฐ ์ข์๋ ํ์ด๋ก ๊ธฐ์กด ์ฃผ์์ด ์๋ ๋ถ๋ถ์ ์ฃผ์์ ์ถ๊ฐ์ ์ผ๋ก ์์ฑํ์์.
function solution(board) {
    const N = board.length
    // ์ฐ ํ ์ข ์
    const direction = [[1, 0], [0, -1], [-1, 0], [0, 1]];
    // x, y, ๋ฐฉํฅ์ธ๋ฑ์ค, cost
    const q = [[0, 0, null, 0]];
    while (q.length) {
        const [x, y, dir, cost] = q.shift();
        if (board[x][y] < cost && board[x][y] > 0) continue;
        board[x][y] = cost;
        direction.forEach(([i, j], ndir) => {
            // ๋ฐ๋ ๋ฐฉํฅ์ ๊ฐ์ง ์๋๋ค.
            if (dir !== null && Math.abs(ndir - dir) === 2) return;
            const [nx, ny] = [x + i, y + j];
            if (0 > nx || nx >= N || 0 > ny || ny >= N || board[nx][ny] === 1) return;
            
            q.push([nx, ny, ndir, dir !== null && dir !== ndir ? cost + 600 : cost + 100]);
        })
    }
    return board[N - 1][N - 1];
}