Skip to content

Commit 6f5c1c4

Browse files
authored
Merge pull request #1083 from AlgorithmWithGod/0224LJH
[20251010] PGM / Lv3 / 산 모양 타일링 / 이종환
2 parents e829eb4 + 92ea237 commit 6f5c1c4

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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+
```

0 commit comments

Comments
 (0)