1) DFS (모든 조합 체크)
#include<iostream>
using namespace std;
int test_case, N;
int cnt = 0;
void solve(int sum) {
if (sum == N) {
cnt++;
return;
}
if (sum > N) return;
for (int i = 1; i <= 3; i++) {
solve(sum+i);
}
}
int main() {
cin >> test_case;
for (int i = 0; i < test_case; i++) {
cin >> N;
solve(0);
cout << cnt << endl;
cnt = 0;
}
return 0;
}
2) DP (점화식 도출)
각 숫자가 나올 수 있는 경우의 수를 계산하면 dp[n] = dp[n-3] + dp[n-2] + dp[n-1] 라는 점화식을 도출할 수 있다.
#include<iostream>
using namespace std;
int test_case, N;
int cnt = 0;
int dp[12] = { 0, };
int main() {
dp[1] = 1;
dp[2] = 2;
dp[3] = 4;
cin >> test_case;
for (int i = 0; i < test_case; i++) {
cin >> N;
cnt = 0;
for (int i = 4; i <= N; i++) {
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
}
cout << dp[N] << endl;
}
return 0;
}
'Programming > BOJ' 카테고리의 다른 글
[백준/C++] 2661번: 좋은수열 (DFS, 백트랙킹) (0) | 2020.11.26 |
---|---|
[백준/C++] 1929번: 소수 구하기 (여러가지 소수 판별법) (0) | 2020.11.25 |
[백준/C++] 9663번: N-Queen (DFS, 백트랙킹) (0) | 2020.11.24 |
[백준/C++] 1182번: 부분수열의 합 (DFS) (0) | 2020.11.24 |
[백준/C++] 1966번: 프린터 큐 (우선순위 큐) (0) | 2020.09.15 |