728x90
https://www.acmicpc.net/problem/9095
동적계획법 C++
n이 1,2,3의 합으로 구성되는 경우의 수를 구하는 문제 (조합아님)
접근 방법
n을 1,2,3의 합으로 나타내는 경우의 수는 ( n-1의 경우 + n-2의 경우 + n-3의 경우) 이다.
순서가 상관있는 문제기때문에 n-1의 경우에 +1 을 한 경우들, n-2의 경우에 +2를 한 경우들, n-3의 경우에 +3을 한 경우들이
모두 다른 경우로 여겨진다.
n이 1,2,3인 경우 초기값을 미리 지정해두고 배열에 담긴 값을 사용한다.
cases[n] = cases[n-1]+cases[n-2]+cases[n-3] 식을 사용한다.
소스코드
#include <iostream>
using namespace std;
int main(){
int T;
cin >> T;
int cases[11] = {0};
cases[1] = 1;
cases[2] = 2;
cases[3] = 4;
int n;
for(int i = 0 ; i < T ; i++){
cin >> n;
for(int j = 4 ; j <= n ; j++){
if(cases[j] != 0){
continue;
}
cases[j] = cases[j-1]+cases[j-2]+cases[j-3];
}
cout << cases[n] << "\n";
}
return 0;
}
728x90
'알고리즘 문제풀이' 카테고리의 다른 글
[백준 11057] 알고리즘 52일차 : 오르막 수 (0) | 2020.08.27 |
---|---|
[백준 11054] 알고리즘 51일차 : 가장 긴 바이토닉 부분 수열 (0) | 2020.08.26 |
[백준 1920] 알고리즘 49일차 : 수 찾기 (0) | 2020.08.24 |
[백준 11722] 알고리즘 48일차 : 가장 긴 감소하는 부분 수열 (0) | 2020.08.21 |
[백준 11055] 알고리즘 47일차 : 가장 큰 증가 부분 수열 (0) | 2020.08.20 |