๋ฌธ์
์ฝ๋
#include <iostream>
#define MOD 9901
using namespace std;
int dp[100001][3];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
dp[0][0] = 1; // ์ฌ์๋ฅผ ๋์ง์๋ ๊ฒฝ์ฐ
dp[0][1] = 1; // ์ฌ์๋ฅผ ์ผ์ชฝ์ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ
dp[0][2] = 1; // ์ฌ์๋ฅผ ์ค๋ฅธ์ชฝ์ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐz
int N; cin>>N;
for(int i=1; i<N; i++){
dp[i][0] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2]) % MOD;
dp[i][1] = (dp[i-1][0] + dp[i-1][2]) % MOD;
dp[i][2] = (dp[i-1][0] + dp[i-1][1]) % MOD;
}
cout<<(dp[N-1][0] + dp[N-1][1] + dp[N-1][2]) % MOD;
}
ํ์ด
DP๋ฌธ์ ์ ๋๋ค. ์ฝ๋์ ์ฃผ์์๋ ์ ํ ์๋ฏ์ด, ๋ฐฐ์ด์ ์๋์ ๊ฐ์ด ์ค์ ํฉ๋๋ค.
- dp[index][0]: ํด๋น ์นธ์ ์ฌ์๋ฅผ ๋์ง ์์๋ ์ง๊ธ๊น์ง ์ ํ ํ ์ ์๋ ์ด ๊ฒฝ์ฐ์ ์
- dp[index][1]: ํด๋น ์นธ์ ์ผ์ชฝ์ ์ฌ์๋ฅผ ๋์์๋ ์ง๊ธ๊น์ง ์ ํ ํ ์ ์๋ ์ด ๊ฒฝ์ฐ์ ์
- dp[index][2]: ํด๋น ์นธ์ ์ค๋ฅธ์ชฝ์ ์ฌ์๋ฅผ ๋์์๋ ์ง๊ธ๊น์ง ์ ํ ํ ์ ์๋ ์ด ๊ฒฝ์ฐ์ ์
๊ทธ ๋ค, ์๋์ ๊ฐ์ด ๋ฐ๋ณต๋ฌธ์ ๋๋ ค ๊ณ์ฐํฉ๋๋ค.
- dp[i][0] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2]) % MOD;
- ํ์ฌ ์นธ์ ์ฌ์๋ฅผ ๋์ง ์๋ ์ด ๊ฒฝ์ฐ์ ์ = (์ด์ ์นธ์ ์ฌ์๋ฅผ ๋์ง์๋ ์ด ๊ฒฝ์ฐ์ ์ + ์ด์ ์นธ์ ์ผ์ชฝ์ ์ฌ์๋ฅผ ๋๋ ์ด ๊ฒฝ์ฐ์ ์ + ์ด์ ์นธ์ ์ค๋ฅธ์ชฝ์ ์ฌ์๋ฅผ ๋๋ ์ด ๊ฒฝ์ฐ์ ์)
- dp[i][1] = (dp[i-1][0] + dp[i-1][2]) % MOD;
- ํ์ฌ์นธ์ ์ผ์ชฝ์ ์ฌ์๋ฅผ ๋๋ ์ด ๊ฒฝ์ฐ์ ์ = (์ด์ ์นธ์ ์ฌ์๋ฅผ ๋์ง ์๋ ์ด ๊ฒฝ์ฐ์ ์ + ์ด์ ์นธ์ ์ค๋ฅธ์ชฝ์ ์ฌ์๋ฅผ ๋๋ ์ด ๊ฒฝ์ฐ์ ์)
- dp[i][2] = (dp[i-1][0] + dp[i-1][1]) % MOD;
- ํ์ฌ์นธ์ ์ค๋ฅธ์ชฝ์ ์ฌ์๋ฅผ ๋๋ ์ด ๊ฒฝ์ฐ์ ์ = (์ด์ ์นธ์ ์ฌ์๋ฅผ ๋์ง ์๋ ์ด ๊ฒฝ์ฐ์ ์ + ์ด์ ์นธ์ ์ผ์ชฝ์ ์ฌ์๋ฅผ ๋๋ ์ด ๊ฒฝ์ฐ์ ์)
๊ทธ ๋ค, ์ด ๊ฒฝ์ฐ์ ์ = (ํ์ฌ ์นธ์ ์ฌ์๋ฅผ ๋์ง ์๋ ๊ฒฝ์ฐ + ํ์ฌ ์นธ์ ์ผ์ชฝ์ ์ฌ์๋ฅผ ๋๋ ๊ฒฝ์ฐ + ํ์ฌ์ ์ค๋ฅธ์ชฝ์ ์ฌ์๋ฅผ ๋๋ ๊ฒฝ์ฐ)๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 1043๋ฒ - ๊ฑฐ์ง๋ง (0) | 2022.09.28 |
---|---|
[๋ฐฑ์ค,c++] 22858๋ฒ - ์์ ๋ณต๊ตฌ(small) (0) | 2022.09.28 |
[๋ฐฑ์ค,c++] 25644๋ฒ - ์ต๋ ์์น (0) | 2022.09.28 |
[๋ฐฑ์ค,c++] 12782๋ฒ - ๋นํธ ์ฐ์ ์ง์ (0) | 2022.09.27 |
[๋ฐฑ์ค,c++] 1038๋ฒ - ๊ฐ์ํ๋ ์ (0) | 2022.09.27 |
[๋ฐฑ์ค,c++] 16935๋ฒ - ๋ฐฐ์ด ๋๋ฆฌ๊ธฐ 3 (0) | 2022.09.22 |
๋๊ธ