개요
Unique Paths - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
격자판이 주어지는데 시작 지점 왼쪽 상단 모서리부터, 도착 지점 오른쪽 하단 모서리까지 도착할 수 있는 모든 경우의 수를 구하는 문제이다
도착 지점까지 오른쪽과 아래쪽으로 한 칸씩만 이동할 수 있다.
풀이
일반적인 dp 접근 방식으로 풀면 어렵지 않게 풀 수 있다.
특정 위치로 도착하는 경우의 수는 아래로 내려오는 경우와 오른쪽으로 이동하는 경우 해당 좌표로 도착할 수 있는데 그 전 좌표까지의 경우의 수를 합하면 된다.
이떄 주의해야할 점은 가장 왼쪽과 가장 위쪽 벽으로 이동하는 경우는 계속해서 아래로 이동하거나 오른쪽으로 이동하는 경우뿐이니 한 가지 경우밖에 없다. 그 부분만 1로 설정해준다
/**
* @param {number} m
* @param {number} n
* @return {number}
*
* 로봇이 왼쪽 상단 모서리 0, 0에서 시작해서 오른쪽 하단 모서리 지점인 m -1 n -1 지점까지 이동한다고 한다.
*
* 로봇은 아래, 오른쪽만 이동할 수 있다고 가정한다.
*
* 잘 생각해보면 [i][j]는 그전까지 올 수 있는 방향들의 합과 같다
*
*
* 이때 도착할 수 있는 모든 경우의 수를 구해라
* DFS => Run Time exceeded
*/
var uniquePaths = function (m, n) {
let answer = 0;
const dy = Array.from({ length: m }, () => Array(n).fill(0));
if (m === 1 || n === 1) return 1;
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (i === 0 || j === 0) dy[i][j] = 1;
else {
dy[i][j] = dy[i - 1][j] + dy[i][j - 1];
}
}
}
return dy[m - 1][n - 1];
// function DFS(row, col) {
// if (row === m - 1 && col === n - 1) answer += 1;
// else {
// if (row < m) DFS(row + 1, col);
// if (col < n) DFS(row, col + 1);
// }
// }
// DFS(0, 0);
};
'알고리즘' 카테고리의 다른 글
[알고리즘] LeetCode Decode String JS (0) | 2022.11.23 |
---|---|
[알고리즘] LeetCode 438. Find All Anagrams in a String JS (0) | 2022.11.21 |
[알고리즘] LeetCode Number of IsLands (0) | 2022.11.18 |
[알고리즘] LeetCode Flood Fill (0) | 2022.11.18 |
[알고리즘] Leetcode Longest Palindrome (0) | 2022.11.16 |