๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ/LeetCode

[LeetCode] Unique Paths

๋ฌธ์ œ๋งํฌ

 

m*n ํ–‰๋ ฌ์ด ์ฃผ์–ด์งˆ๋•Œ ๋กœ๋ด‡์€ [0][0]์—์„œ ์ถœ๋ฐœํ•ด์„œ [m-1][n-1]๋กœ ๋„์ฐฉํ•˜๋ คํ•œ๋‹ค.
์ด๋•Œ ๋กœ๋ด‡์ด ๋„์ฐฉ์ง€์— ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜์—ฌ๋ผ

์กฐ๊ฑด : ๋กœ๋ด‡์€ ์˜ค๋ฅธ์ชฝ๊ณผ ์•„๋ž˜๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ ‘๊ทผ ๋ฐฉ๋ฒ•

1. Dynamic Programming ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์ด

2. ์žฌ๊ท€ํ•จ์ˆ˜ ๋ฐฉ์‹์œผ๋กœ ํ’€์ด


1. DP๋กœ ํ’€์ด๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ทœ์น™์„ ๋ฐœ๊ฒฌํ•ด์•ผํ•œ๋‹ค.
๊ทœ์น™์€ ๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด ๋” ์‰ฌ์šด๋ฐ

์ด์ „ ํ–‰๊ณผ ์ด์ „ ์—ด์˜ ๊ฐ’์„ ๋”ํ•˜๋ฉด ๋‹ค์Œ ํ–‰์—ด์˜ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

์ฆ‰, dp[row][col] = dp[row-1][col] + dp[row][col-1]

2์ฐจ ํ–‰๋ ฌ์„ ๋‹ค๋ฃจ๋ฏ€๋กœ 2์ค‘ for๋ฌธ์ด ํ•„์š”ํ•˜๋‹ค.

const dp = Array.from({length : m}, () => Array(n).fill(1));
    
for(let row = 1; row < m; row++){
    for(let col = 1; col < n; col++){
        dp[row][col] = dp[row-1][col] + dp[row][col-1];
    }
}โ€‹

dp[0][0] ~ dp[m][0] === 1
dp[0][0] ~ dp[0][n] === 1
์ด๋ฏ€๋กœ 2์ฐจ์› ๋ฐฐ์—ด์„ ์ƒ์„ฑํ• ๋•Œ 1๋กœ ์ฑ„์›Œ์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  2์ค‘ for๋ฌธ์„ ํ†ตํ•ด ๊ทœ์น™์— ๋งž์ถฐ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.


2. ์žฌ๊ท€ํ•จ์ˆ˜

์žฌ๊ท€ํ•จ์ˆ˜ ์—ญ์‹œ ๊ทœ์น™๊ณผ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ์ฐพ์•„์•ผํ•œ๋‹ค.

์ข…๋ฃŒ ์กฐ๊ฑด์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ–ˆ๋‹ค.

if(row > m || col > n){
    return 0;
}else if(row === m && col === n){
    return 1;
}

row์™€ col์ด ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด 0์œผ๋กœ ์ข…๋ฃŒํ•˜๊ณ , ๋ชฉ์ ์ง€์— ๋„์ฐฉํ•˜๋ฉด 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.


๋ฐ˜๋ณต์€ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ ๋ชฉ์ ์ง€๋กœ ๊ฐ€๋Šฅ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ• ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

return re(row+1, col) + re(row, col+1);


ํ•˜์ง€๋งŒ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ๋Š” m = 23, n = 12 ์ฒ˜๋Ÿผ ํฐ ๋ฒ”์œ„๋ฅผ ๊ตฌํ•˜์ง„ ๋ชปํ–ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ๋Š” ์‹œ๊ฐ„ ์ œํ•œ์ด ์—†๊ธฐ๋•Œ๋ฌธ์— dp์™€ ๊ฐ™์€ ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ leetcode์—์„œ๋Š” ์‹คํŒจํ•˜์˜€๋‹ค.

 

 

// DP ๋ฐฉ๋ฒ•
/**
 * @param {number} m
 * @param {number} n
 * @return {number}
 */
 var uniquePaths = function(m, n) {
    const dp = Array.from({length : m}, () => Array(n).fill(1));
    
    for(let row = 1; row < m; row++){
        for(let col = 1; col < n; col++){
            dp[row][col] = dp[row-1][col] + dp[row][col-1];
        }
    }
    
    return dp[m-1][n-1];
}

 

// ์žฌ๊ท€ ๋ฐฉ๋ฒ•
var uniquePaths = function(m, n) {
    
    const re = (row, col) => {
        if(row > m || col > n){
            return 0;
        }else if(row === m && col === n){
            return 1;
        }
        
        return re(row+1, col) + re(row, col+1);
    }
    
    return re(1, 1)
};

'์ฝ”๋”ฉํ…Œ์ŠคํŠธ > LeetCode' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[LeetCode] My Calendar I  (0) 2022.08.03
[LeetCode] Kth Smallest Element In A Sorted Matrix  (0) 2022.08.02
[LeetCode] Find And Replace Pattern  (0) 2022.07.29
[LeetCode] Valid Anagram  (0) 2022.07.28
[LeetCode] Median Of Two Sorted Arrays  (0) 2022.07.25