File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ /*
2+
3+ 1. 아이디어 : dp 활용
4+ 오른쪽, 아래 방향으로만 이동 가능
5+ 이동 도중 0 이하가 되면 안됨
6+ 도착지부터 출발지까지 역방향으로 이동하며, 최소 Stat를 찾는다
7+
8+ 포인트: 원래 던전 크기보다 +1씩 배열값을 초기화
9+ 도착지 [m-1][n-1]근처는 1로 초기화 하여 계산 (경계값 처리 줄이기)
10+
11+ 2. 시간복잡도 : O(M * N)
12+
13+ 3. 자료구조/알고리즘 : 이차원 DP
14+
15+ */
16+
17+ class Solution {
18+ public int calculateMinimumHP (int [][] dungeon ) {
19+ int m = dungeon .length ;
20+ int n = dungeon [0 ].length ;
21+
22+ int [][] dp = new int [m +1 ][n +1 ];
23+ for (int i = 0 ; i <= m ; i ++) {
24+ for (int j = 0 ; j <= n ; j ++) {
25+ dp [i ][j ] = Integer .MAX_VALUE ;
26+ }
27+ }
28+
29+ dp [m ][n -1 ] = 1 ;
30+ dp [m -1 ][n ] = 1 ;
31+
32+ for (int i =m -1 ; i >=0 ; i --) {
33+ for (int j =n -1 ; j >=0 ; j --) {
34+ int a = dp [i ][j +1 ];
35+ int b = dp [i +1 ][j ];
36+ int status = dungeon [i ][j ];
37+
38+ dp [i ][j ] = Math .max (1 , Math .min (a , b ) - status );
39+ }
40+ }
41+
42+ return dp [0 ][0 ];
43+ }
44+ }
You can’t perform that action at this time.
0 commit comments