File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed
Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change 1+ ``` java
2+ import java.io.* ;
3+ import java.util.* ;
4+
5+ class Solution {
6+ static int size;
7+ static boolean [] hasTop;
8+ static int [][] dp;
9+
10+ static final int EMPTY = 0 ;
11+ static final int LEFT = 1 ;
12+ static final int TOP = 2 ;
13+ static final int RIGHT = 3 ;
14+ static final int REMAINDER = 10007 ;
15+
16+ public int solution (int n , int [] tops ) {
17+ size = n;
18+ hasTop = new boolean [n];
19+ dp = new int [size][4 ];
20+
21+ for (int i = 0 ; i < n; i++ ) hasTop[i] = tops[i] == 1 ;
22+
23+ process();
24+
25+
26+ int answer = dp[size- 1 ][EMPTY ] + dp[size- 1 ][LEFT ] + dp[size- 1 ][TOP ] + dp[size- 1 ][RIGHT ] ;
27+ answer %= REMAINDER ;
28+ return answer;
29+ }
30+
31+ private void process (){
32+ // i번칸의 경우의 수
33+ // dp[i][아무것도 안함]= dp[i-1][모든 경우]
34+ // dp[i][왼쪽으로 뻗음] = dp[i-1][왼쪽으로 뻗음] + dp[i-1][위로뻗음] + dp[i-1][아무것도 안함]
35+ // dp[i][위로 뻗음] = (top이 있음)? dp[i-1][모든 경우]: 0;
36+ // dp[i][오른쪽으로 뻗음] = dp[i-1]모든 경우
37+
38+ dp[0 ][EMPTY ] = 1 ;
39+ dp[0 ][LEFT ] = 1 ;
40+ dp[0 ][RIGHT ] = 1 ;
41+ if (hasTop[0 ]) dp[0 ][TOP ] = 1 ;
42+
43+ for (int i = 1 ; i < size; i++ ){
44+ int sum = dp[i- 1 ][EMPTY ] + dp[i- 1 ][TOP ] + dp[i- 1 ][LEFT ] + dp[i- 1 ][RIGHT ];
45+ dp[i][EMPTY ] = sum% REMAINDER ;
46+ dp[i][LEFT ] = (sum- dp[i- 1 ][RIGHT ])% REMAINDER ;
47+ dp[i][RIGHT ] = sum% REMAINDER ;
48+ if (hasTop[i]) dp[i][TOP ] = sum% REMAINDER ;
49+ }
50+ }
51+ }
52+ ```
You can’t perform that action at this time.
0 commit comments