반응형

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

 

15988번: 1, 2, 3 더하기 3

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.

www.acmicpc.net

 

1 만들 수 있는 경우 : [1] --> 1개

2 만들 수 있는 경우 : [1+1, 2] --> 2개

3 만들 수 있는 경우 : [1+1+1, 1+2, 2+1, 3] --> 4개

4 만들 수 있는 경우 : [1+1+1+1, 1+1+2, 1+2+1, 1+3, 2+1+1, 2+2, 3+1] -->7개

5 만들 수 있는 경우 : [1+(4 만들 수 있는 경우), 2+(3 만들 수 있는 경우), 3+(2 만들 수 있는 경우)] --> 13개

n 만들 수 있는 경우 : [(n-1 만들 수 있는 경우), (n-2 만들 수 있는 경우), (n-3 만들 수 있는 경우)] 이므로,

dp[n] = dp[n-1] + dp[n-2] + dp[n-3]

 

#include <cstdio>
int main() {
	int n, t;
    long long int dp[1000001] = {0,1,2,4};
	scanf("%d", &t);
	for (int i = 4; i <= 1000000; i++)
		dp[i] = (dp[i - 1] + dp[i - 2] + dp[i - 3]) % 1000000009;
	while (t--) {
		scanf("%d", &n);
		printf("%lld\n", dp[n]);
	}
}
반응형

'Algorithm' 카테고리의 다른 글

백준 16194 : 카드 구매하기 2  (0) 2021.11.12
백준 11052 : 카드 구매하기  (0) 2021.11.12
백준 11727 : 2xn 타일링 2  (0) 2021.11.12
백준 14226 : 이모티콘  (0) 2021.11.12
백준 4963 : 섬의 개수  (0) 2021.11.12

+ Recent posts