풀이
#include <iostream>
#define MAX 1000001
#define MOD 1000000009
int n;
long long d[MAX];
using namespace std;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T;
cin >> T;
d[1] = 1, d[2] = 2, d[3] = 4;
while(T--) {
cin >> n;
for( int j = 4; j <= n; ++j ) {
d[j] = (d[j - 3] + d[j - 2] + d[j - 1]) % MOD;
}
cout << d[n] % MOD << '\n';
}
return 0;
}
d[n]을 정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수라고 하면, d[1] = 1 (1), d[2] = 2 (1, 1),(2), d[3] = 4(1, 1, 1), (1, 2), (2, 1), (3)이고 i가 3보다 크다고 했을 때, d[i]는 d[1], d[2], d[3]을 통해서 표현할 수 있다. ex) d[4] = (1, 3), (2, 2), (3, 1) 등
이를 활용해서 d[j]에 대한 식을 구하고 이를 MOD의 값으로 나눈 나머지를 출력
'Koala - 15기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/Python] 25602번 캔 주기 (0) | 2024.07.07 |
---|---|
[백준/Python] 9095번: 1, 2, 3 더하기 (0) | 2024.07.07 |
[백준/Python] 2561 세 번 뒤집기 (0) | 2024.07.06 |
[BOJ/Java] - 흩날리는 시험지 속에서 내 평점이 느껴진거야 (0) | 2024.07.04 |
[백준/Python3] 2529번: 부등호 (0) | 2024.07.04 |