문제 링크 : https://www.acmicpc.net/problem/9095
1, 2, 3 더하기 성공
문제정수 4를 1, 2, 3의 조합으로 나타내는 방법은 총 7가지가 있다.
정수 n이 주어졌을 때, n을 1,2,3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오. 입력첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다. 출력각 테스트 케이스마다, n을 1,2,3의 합으로 나타내는 방법의 수를 출력한다. 예제 입력 13 4 7 10 예제 출력 17 44 274 |
[ 문제 풀이 ]
- N = 1일 때, 1 --- 1가지
- N = 2일 때, 1+1, 2 -- 2가지
- N = 3일 때, 1+1+1, 2+1, 1+2, 3 -- 4가지
아래와 같이 중복되는 경우를 제거하면,
따라서, D[n] = D[n-1] + D[n-2] + D[n-3]
#include <stdio.h> #define MAX_NUMBER_SIZE 1000002 int D[MAX_NUMBER_SIZE] = { 0 }; int main(void) { int TC; scanf("%d", &TC); D[0] = 0; D[1] = 1; D[2] = 2; D[3] = 4; while (TC-- > 0) { int N; scanf("%d", &N); for (register int i = 4; i <= N; i++) { D[i] = D[i - 1] + D[i - 2] + D[i - 3]; } printf("%d\n", D[N]); } return 0; }
'Algorithm > 문제풀이' 카테고리의 다른 글
[주의][다이나믹 프로그래밍] 쉬운 계단 수 (0) | 2018.08.05 |
---|---|
[다이나믹 프로그래밍] 붕어빵 판매하기 (0) | 2018.08.04 |
[주의][다이나믹 프로그래밍] 2×n 타일링 2 (0) | 2018.08.04 |
[주의][다이나믹 프로그래밍] 2×n 타일링 (0) | 2018.08.04 |
[다이나믹 프로그래밍] 1로 만들기 (0) | 2018.08.04 |