본문 바로가기

알고리즘/리트코드

62. Unique Paths

우선 m이 row를 뜻하므로 1줄이라면 별까지 가는 경우의 수는 1개일 수밖에 없다.

1줄이 아니라면 옛날에 그 미로찾기같은거 할 때 경우의 수 구하는 방법에서 여기까지 오는데 가능한 경우의 수를 써놓고 한칸전진하면 이전 경우의 수들 더해서 작성하는 그 방식으로 문제를 풀었다.

const uniquePaths = function(m, n) {
    if (m == 1) return 1;

    const arr = Array.from ({length: m}, () => Array.from ({length: n} , () => 0)) 

    for (let i = 0 ; i < n ; i++) {
        arr[0][i] = 1
    }

    for (let i = 0 ; i < m ; i++) {
        arr[i][0] = 1
    }


    for (let i = 1; i < m; i++) {
        for (let j = 1; j < n ; j++) {
            arr[i][j] = arr[i-1][j] + arr[i][j-1]
        }
    }
    return arr[m-1][n-1]
};

결국 dp 문제

const uniquePaths = function(m, n) {
    let dp = new Array(m).fill(0).map(() => new Array(n));

    for(let row = m - 1; row >= 0; row--) {
        for(let col = n - 1; col >= 0; col--) {
            if(row === (m - 1) || col === (n - 1)) dp[row][col] = 1;
            else dp[row][col] = dp[row + 1][col] + dp[row][col + 1];
        }
    }
    return dp[0][0];
};

'알고리즘 > 리트코드' 카테고리의 다른 글

289. Game of Life  (0) 2022.04.13
704. Binary Search  (0) 2022.04.13
46. Permutations  (0) 2022.04.06
53. Maximum Subarray  (0) 2022.04.05
187. Repeated DNA Sequences  (0) 2022.04.03