File tree Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments