문제링크: https://www.acmicpc.net/problem/9095
정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
#include <iostream>
int dp[11] = { 0, };
int main() {
int T; std::cin >> T;
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
for (int test = 0; test < T; test++) {
int n; std::cin >> n;
for (int i = 4; i <= n; i++) {
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
}
std::cout << dp[n] << "\n";
}
return 0;
}
점화식
간단한 규칙만 찾으면 해결되는 문제이다.
n이 1, 2, 3일 때 각각 얼마가 되는지 알 수 있고 4까지 값을 구한다면, 그 규칙을 찾을 수 있다.
PS는 어떻게 답을 고민해내냐도 중요하지만 속도또한 매우 중요한 요소이다.
불필요한 코드작성을 줄여서 풀이시간 단축을 위해 using namespace std
를 써야할 것 같다.