본문 바로가기

PS

[ 백준 / C++ ] 15990 : 1, 2, 3 더하기 5

[ 문제 ]

 

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

 

[ 접근방법 ]

 

dp[ i ][ j ] = j로 시작해서 총 합이 i인 경우의 수

 

위와 같이 정의를 하고 같은 수를 연속으로 사용하는 것에 유의하며 DP를 활용한다.

 

[ 소스코드 ]

 

#include <iostream>

using namespace std;

const long long MOD = 1000000009;

int t, n;
long long dp[100010][4];

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

    dp[1][1] = 1;
    dp[2][2] = 1;
    dp[3][3] = 1;

    for(int i = 2; i <= 100000; i++){
        if(i > 1)dp[i][1] = (dp[i - 1][2] + dp[i - 1][3]) % MOD;
        if(i > 2)dp[i][2] = (dp[i - 2][1] + dp[i - 2][3]) % MOD;
        if(i > 3)dp[i][3] = (dp[i - 3][1] + dp[i - 3][2]) % MOD;
    }

    cin >> t;

    while(t--){
        cin >> n;
        cout << (dp[n][1] + dp[n][2] + dp[n][3]) % MOD << "\n";
    }

    return 0;
}

'PS' 카테고리의 다른 글

[ 백준 / C++ ] 1072 : 게임  (1) 2024.09.24
[ 백준 / C++ ] 1015 : 수열 정렬  (0) 2024.09.23
[ 백준 / C++ ] 11505 : 구간 곱 구하기  (0) 2024.09.04
[ 백준 / C++ ] 1043 : 거짓말  (0) 2024.08.30
[ 백준 / C++ ] 12851 : 숨바꼭질 2  (0) 2024.08.26