Algorithm/DP
백준 파도반 수열(9461) C++ 풀이
khjtoy
2023. 1. 20. 00:09
알고리즘 분류
수학
다이나믹 프로그래밍(DP)
문제 해결 아이디어
1, 1, 1, 2, 2, 3, 4, 5, 7, 9 ...로 진행되기 때문에 이 패턴을 잘 보면서 4번째부터 n - 3번째 + n - 2번째를 더해 값이 나오는 것을 알 수 있다. 따라서 1,2,3번째를 미리 1로 세팅 후 dp[n - 3] + dp[n - 2]로 해결한다.
코드
#include <iostream>
using namespace std;
long long dp[101];
int main()
{
dp[0] = 0; dp[1] = 1; dp[2] = 1; dp[3] = 1;
int t, n;
cin >> t;
for (int i = 0; i < t; i++)
{
cin >> n;
for (int i = 4; i <= n; i++)
{
if (dp[i] != 0) continue;
dp[i] = dp[i - 3] + dp[i - 2];
}
cout << dp[n] << "\n";
}
}
코드 설명
단순히 입력을 받은만큼 for문을 돌아 dp[i - 3] + dp[i - 2] 공식을 이용해 답을 구하고, 만약 구하려는 값이 dp[i]가 0이
아니면 이미 구한 값이 때문에 그 계산은 건너뛴다.