PS/BOJ

BOJ 9095 1, 2, 3 더하기

모달조아 2021. 6. 28. 00:45

boj 9095 1, 2, 3 더하기

D[i] = 정수 i를 1, 2, 3의 합으로 나타내는 방법의 수라고 하자. 앞 부분은 겹치는 부분이므로 맨 마지막에 올 수 있는 1, 2, 3의 경우만 살펴보면 된다.

  • n = n-1 + 1 -> n-1을 1, 2, 3 합으로 만드는 방법들을 나열하고 각 끝에 1을 붙이는 경우
  • n = n-2 + 2 -> n-2를 1, 2, 3 합으로 만드는 방법들을 나열하고 각 끝에 2를 붙이는 경우
  • n = n-3 + 3 -> n-3을 1, 2, 3 합으로 만드는 방법들을 나열하고 각 끝에 3을 붙이는 경우

D[i]는 위 세 가지 경우의 합이다. 그러므로 점화식을 D[i] = D[i-1] + D[i-2] + D[i-3]로 설정하고 구현한다.

#include <iostream>
using namespace std;

int t;
int D[15];

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

    cin >> t;

    D[0] = 0;
    D[1] = 1;
    D[2] = 2;
    D[3] = 4;

    for (int i = 0; i < t; i++)
    {
        int n;
        cin >> n;
        for (int i = 4; i < 11; i++)
        {
            D[i] = D[i - 1] + D[i - 2] + D[i - 3];
        }
        cout << D[n] << '\n';
    }
}