#include <iostream>
using namespace std;
int main(void)
{
// 1, 2, 3 일때 각각의 갯수 담아놓음
int answer[11] = {0, 1, 2, 4};
// 4 이상부터는 [(i-3) 에 3을 더하는 방법]. [(i-2) 에 2를 더하는 방법], [(i-1) 에 1을 더하는 방법] 의 합으로 구할 수 있다.
for(int i = 4 ; i < 11 ; i++)
{
answer[i] = answer[i - 1] + answer[i - 2] + answer[i - 3];
}
int t;
cin >> t;
for(int tc = 0 ; tc < t ; tc++)
{
int n;
cin >> n;
cout << answer[n] << '\n';
}
}
[Approach]
1. 재귀 처럼 DP 배열 만들어놓고 규칙에 의해 구하면 될 것 같다.
[Point]
1. 문제에서 n 의 범위를 왜 10까지밖에 안줬을까? 그냥 배열 10개 직접 구해서 계산해도 맞다.
2. 생각보다 1,2,3 의 순서도 영향을 미친다는 점 때문에 살짝 헷갈렸다.
'PS > BOJ' 카테고리의 다른 글
[백준] 9461.cpp : 파도반 수열 (0) | 2020.07.02 |
---|---|
[백준] 9375.cpp : 패션왕 신해빈 (0) | 2020.07.02 |
[백준] 2606.cpp : 바이러스 (0) | 2020.07.01 |
[백준] 10216.cpp : Count Circle Groups (0) | 2020.06.30 |
[백준] 2579.cpp : 계단 오르기 (0) | 2020.06.30 |