Notice
Recent Posts
Recent Comments
Link
Dev.baelanche
[백준 10844] 쉬운 계단 수 본문
반응형
n 이 1일때 9 (1, 2, 3, 4, ..., 9)
n 이 2일때 17 이다.
십의 자리수가 5일때 54 혹은 56 이어야 하므로
자리수 n 이 i, 일의 자리수가 j 일때
dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1];
위와 같은 점화식을 얻을 수 있다.
n이 2일때의 계단수가 17인 이유는 01 이 빠졌기 때문이다.
일의 자리수가 0일때는 제외해야 하므로 점화식에 추가해준다.
if(j == 0) dp[i][j] = dp[i-1][j+1];
else dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1];
마찬가지로 9일때도 90 같은 수는 만들 수 없으니 예외처리 한다.
if(j == 0) dp[i][j] = dp[i-1][j+1];
else if(j == 9) dp[i][j] = dp[i-1][j-1];
else dp[i][j] = dp[i-1][j-1] + dp[i-1][j+1];
dp[0] 배열은 n이 1일때의 경우의 수를 모두 더해주면 된다.
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long dp[][] = new long[n][10];
for(int i=1; i<10; i++)
dp[0][i] = 1;
for(int i=1; i<n; i++) {
for(int j=0; j<10; j++) {
if(j == 0) dp[i][j] = dp[i-1][j+1];
else if(j == 9) dp[i][j] = dp[i-1][j-1];
else dp[i][j] = (dp[i-1][j-1]%1000000000 + dp[i-1][j+1]%1000000000)%1000000000;
}
}
long sum = 0;
for(int i=0; i<10; i++) {
sum += dp[n-1][i];
sum %= 1000000000;
}
System.out.println(sum);
}
}
(A+B)%C = ((A%C) + (B%C))%C 를 이용하여 1,000,000,000 을 넘지 않게 연산마다 처리해주었다.
반응형
'Data Structure & Algorithm > PS - JAVA' 카테고리의 다른 글
[백준 2606] 바이러스 (0) | 2019.05.10 |
---|---|
[백준 1010] 다리 놓기 (0) | 2019.05.09 |
[백준 1912] 연속합 (0) | 2019.05.09 |
[백준 2290] LCD Test (0) | 2019.05.08 |
[백준 2447] 별 찍기 - 10 (0) | 2019.05.07 |
Comments