728x90
https://www.acmicpc.net/problem/10844
10844번: 쉬운 계단 수
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
www.acmicpc.net
풀이)
import java.util.Scanner;
public class Main_BJ_10844_쉬운계단수 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
// dp[i][j]: i번째 자리수가 j일 때 계단수 값
long[][] dp = new long[n+1][10];
long mod = 1000000000;
// 첫 번째 자리수는 1개
for(int i=1; i<10; i++){
dp[1][i] = 1;
}
for(int i=2; i<=n; i++){
for(int j=0; j<10; j++){
if(j==9){
dp[i][9] = dp[i-1][8]%mod;
}
else if(j==0){
dp[i][0] = dp[i-1][1]%mod;
}
else
dp[i][j] = (dp[i-1][j-1]+dp[i-1][j+1])%mod;
}//j
}//i
long ans = 0;
for(int i=0; i<10; i++){
ans += dp[n][i];
}
System.out.println(ans%mod);
}//main
}
솔직히 일일히 찾아보다가 어떻게 표현해야할지 몰라서 찾아봤다.
내가 찾은 방식이랑 비슷한 아이디어였는데, 결국 0과 9를 제외하고는 양 옆을 탐색한다는 것이다.
따라서 2차원 배열을 선언하고, dp[i][j]라면 i번째 자리수가 j일때 계단수 값을 의미한다.
예를 들어,,,
3XX라면, 34X와 36X를 봐야하므로... dp[i][j] = dp[i-1][j-1]+dp[i-1][j+1]이 점화식이 됨을 확인할 수 있다.
또한!!
dp는 long으로 잡아야 하고, ans 또한 mod 값으로 나눠줘야 한다는 사실을 잊지 말자!
참고 블로그
https://code-lab1.tistory.com/108
[백준] 10844번 쉬운 계단 수 (자바 풀이)
문제 https://www.acmicpc.net/problem/10844 10844번: 쉬운 계단 수 첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 풀이 이 문제는 다이나믹 프로그래밍을 이용해서 해결할 수 있다. T
code-lab1.tistory.com
728x90
'코테 > 백준' 카테고리의 다른 글
백준 2468 안전 영역(JAVA) (0) | 2023.04.12 |
---|---|
백준 1715 카드 정렬하기(JAVA) (0) | 2023.04.11 |
백준 1946 신입 사원(JAVA) (0) | 2023.04.06 |
백준 14503 로봇 청소기(JAVA) (0) | 2023.04.04 |
백준 1245 농장 관리(JAVA) (0) | 2023.04.04 |