https://www.acmicpc.net/problem/9095
문제
정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
- 1+1+1+1
- 1+1+2
- 1+2+1
- 2+1+1
- 2+2
- 1+3
- 3+1
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
출력
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <stdio.h> void sum_123(int N) { int dp[12]; int i; dp[0] = dp[1] = 1; dp[2] = 2, dp[3] = 4; if (N < 4) { printf("%d\n", dp[N]); return; } else { for (i = 4; i <= N; i++) dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]; } printf("%d\n", dp[N]); } int main() { int N; int num; int i; scanf("%d", &N); for (i = 0; i < N; i++) { scanf("%d", &num); sum_123(num); } } | cs |
이문제를 푸는법은 생각보다 간다했다.
결론부터 표현하자면
F(N)= F(N-1)+F(N-2)+F(N-3) 이라는 식이나온다
왜냐면
1는 1개라고 가정
2는 1+1 2 두개
3은 1+1+1 2+1 1+2 3 3개
4는 위에 설명대로 7개이다
5는 12이다
그러므로 4이하는 배열값을출력 그이상은 배열을 더해주면서 계산하면된다.
'백준 알고리즘' 카테고리의 다른 글
[C언어] 백준알고리즘 11502번 카드 구매하기 문제 (0) | 2019.03.26 |
---|---|
[C언어] 백준알고리즘 1149 RGB거리 문제 (2) | 2019.03.25 |
[C언어] 백준알고리즘 2751번 수 정렬하기2 문제 (0) | 2019.03.18 |
[C언어] 백준알고리즘 15953번 상금 헌터 (카카오 코드 페스티벌 2018 예선) (0) | 2019.03.16 |
[C언어] 백준알고리즘 10451번 순환 사이클 문제 (0) | 2019.03.16 |