백준이당

[C++] 백준 9095 : 1,2,3 더하기

이히당 2024. 4. 11. 23:15

9095번: 1, 2, 3 더하기 (acmicpc.net)

 

9095번: 1, 2, 3 더하기

각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.

www.acmicpc.net

 

dp문제다.

dp문제는 점화식을 찾으면 금방끝난다.

 

한 30분쯤 고민하다가 사고가막혀 질문게시판에 힌트보고 풀엇다(ㅜㅜ,,)

 

이 문제의 점화식은 다음과 같다.

f(n) = f(n-1) + f(n-2) + f(n-3)

 

입력 받은 값에 1,2,3 을 각각 더해주면 된다. 내가 왜 이걸 처음 보고 납득하기 힘들었냐면, 이 문제의 경우 '1+3' 과 '3+1'을 다른 것이라고 인식했기 때문이다.

그러나 손으로 몇가지의 경우를 써보면 중복되거나 놓치는 경우는 일어나지 않음을 발견하게 된다.

 

파이팅~!

#include <bits/stdc++.h>
using namespace std;

int n, m;
vector<int> v;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int dp[12];
    dp[1] = 1;
    dp[2] = 2;
    dp[3] = 4;

    int tc;
    cin >> tc;
    while (tc--)
    {

        int n;
        cin >> n;

        for (int i = 4; i <= n; i++)
        {
            dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
        }

        cout << dp[n] << '\n';
    }
}

 

 

728x90