๐ŸŽข[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๊ฒฝ์ฃผ๋กœ ๊ฑด์„ค

Chobbyยท2022๋…„ 9์›” 24์ผ
1

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
42/345
post-thumbnail

๋ณธ ๋ฌธ์ œ๋Š” ์›Œ๋‚™ ๋‹ค์–‘ํ•œ ๋ธ”๋กœ๊ทธ๋“ค์„ ์ฐธ๊ณ ํ•ด์„œ ๋ชจ๋“  ์ถœ์ฒ˜๋ฅผ ๋‚จ๊ธฐ๊ธฐ ์–ด๋ ค์šด ์ ์„ ์ดํ•ดํ•ด์ฃผ์‹ญ์‹œ์˜ค..ใ…œใ…œ

๐Ÿฅผ๋ฌธ์ œ ์„ค๋ช…

๊ฑด์„คํšŒ์‚ฌ์˜ ์„ค๊ณ„์‚ฌ์ธ ์ฃ ๋ฅด๋””๋Š” ๊ณ ๊ฐ์‚ฌ๋กœ๋ถ€ํ„ฐ ์ž๋™์ฐจ ๊ฒฝ์ฃผ๋กœ ๊ฑด์„ค์— ํ•„์š”ํ•œ ๊ฒฌ์ ์„ ์˜๋ขฐ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.
์ œ๊ณต๋œ ๊ฒฝ์ฃผ๋กœ ์„ค๊ณ„ ๋„๋ฉด์— ๋”ฐ๋ฅด๋ฉด ๊ฒฝ์ฃผ๋กœ ๋ถ€์ง€๋Š” 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๋Š” 2์ฐจ์› ์ •์‚ฌ๊ฐ ๋ฐฐ์—ด๋กœ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 3 ์ด์ƒ 25 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • board ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ์˜ ๊ฐ’์€ 0 ๋˜๋Š” 1 ์ž…๋‹ˆ๋‹ค.
    • ๋„๋ฉด์˜ ๊ฐ€์žฅ ์™ผ์ชฝ ์ƒ๋‹จ ์ขŒํ‘œ๋Š” (0, 0)์ด๋ฉฐ, ๊ฐ€์žฅ ์šฐ์ธก ํ•˜๋‹จ ์ขŒํ‘œ๋Š” (N-1, N-1) ์ž…๋‹ˆ๋‹ค.
    • ์›์†Œ์˜ ๊ฐ’ 0์€ ์นธ์ด ๋น„์–ด ์žˆ์–ด ๋„๋กœ ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•จ์„ 1์€ ์นธ์ด ๋ฒฝ์œผ๋กœ ์ฑ„์›Œ์ ธ ์žˆ์–ด ๋„๋กœ ์—ฐ๊ฒฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • board๋Š” ํ•ญ์ƒ ์ถœ๋ฐœ์ ์—์„œ ๋„์ฐฉ์ ๊นŒ์ง€ ๊ฒฝ์ฃผ๋กœ๋ฅผ ๊ฑด์„คํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.
  • ์ถœ๋ฐœ์ ๊ณผ ๋„์ฐฉ์  ์นธ์˜ ์›์†Œ์˜ ๊ฐ’์€ ํ•ญ์ƒ 0์œผ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.

๐Ÿงถ์ž…์ถœ๋ ฅ ์˜ˆ

boardresult
[[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];
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€