Skip to content

Commit 7e89b11

Browse files
committed
solve : #273 (Unique Paths) with Java
1 parent ecd461a commit 7e89b11

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

unique-paths/kdh-92.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// 풀이 핵심
2+
// dp나 1차원 배열 2개를 이용하는 방식의 핵심은 결국 현재 값은 왼쪽 값과 상단 값이 더해진 값으로 이루어진다는 것이다.
3+
// dp는 2차원 배열 공간 모두를 사용해야하지만, 1차원 배열 2개의 경우 2n의 공간을 이용해 현재 값을 만들어 나가게 된다.
4+
class Solution {
5+
public int uniquePaths(int m, int n) {
6+
// (1) dp - 2차원 배열 이용
7+
// 시간복잡도 : O(m * n), 공간복잡도 : O(m * n)
8+
int[][] dp = new int[m][n];
9+
10+
for (int i = 0; i < m; i++) {
11+
for (int j = 0; j < n; j++) {
12+
if (i == 0 && j == 0) {
13+
dp[i][j] = 1;
14+
continue;
15+
}
16+
17+
int pathsFromLeft = (j - 1 >= 0) ? dp[i][j - 1] : 0;
18+
int pathsFromUp = (i - 1 >= 0) ? dp[i - 1][j] : 0;
19+
dp[i][j] = pathsFromLeft + pathsFromUp;
20+
}
21+
}
22+
23+
return dp[m - 1][n - 1];
24+
25+
// (2) 1차원 배열 2개 이용
26+
// 시간복잡도 : O(m * n), 공간복잡도 : O(n)
27+
int[] aboveRow = new int[n];
28+
Arrays.fill(aboveRow, 1);
29+
30+
for (int row = 1; row < m; row++) {
31+
int[] currentRow = new int[n];
32+
Arrays.fill(currentRow, 1);
33+
for (int col = 1; col < n; col++) {
34+
currentRow[col] = currentRow[col - 1] + aboveRow[col];
35+
}
36+
aboveRow = currentRow;
37+
}
38+
39+
return aboveRow[n - 1];
40+
}
41+
}

0 commit comments

Comments
 (0)