안녕하세요.

여행벌입니다.

오늘은 BOJ 10844번 쉬운 계단 수 문제를 풀어보겠습니다.


https://www.acmicpc.net/problem/10844

 

10844번: 쉬운 계단 수

첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

[알고리즘풀이]

Dp[i][j] : i 길이를 가진 계단 수 중 j를 끝으로 하는 수의 갯수.

ex) 길이가 2인 계단 수는 10 / 12 / 21 / 23 / ⋯ / 87 / 89 / 98 이므로

Dp[2][0] = 1, Dp[2][1] = 1, Dp[2][2] = 2 , ⋯ Dp[2][9] = 1 이 성립한다.

이때, 길이가 3이고 끝이 4인 계단 수를 생각해보자. 길이가 2이고 끝이 3 또는 5인 계단수에서 길이가 3이고 끝ㅇ이 4인 계단 수를 만들 수 있으므로 다음과 같은 식이 성립한다.

▶ Dp[i][j] = Dp[i-1][j-1] + Dp[i-1][j+1]

#include<iostream>

using namespace std;

int dp[101][10];

int main(void) {
	for (int i = 1; i < 10; i++)
		dp[1][i] = 1;
	for (int i = 2; i < 101; 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] + dp[i - 1][j + 1]) % 1000000000;
		}
	}
	long long n, answer = 0;
	cin >> n;
	for (int i = 0; i < 10; i++)
		answer += dp[n][i];
	cout << answer % 1000000000;
}

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 1937 - 욕심쟁이 판다  (0) 2019.09.03
[BOJ] 2156 - 포도주 시식  (0) 2019.09.03
[BOJ] 4949 - The Balance of the World  (0) 2019.09.02
[BOJ] 1541 - 잃어버린 괄호  (0) 2019.08.31
[BOJ] 11758 - CCW  (0) 2019.08.28

+ Recent posts