728x90
๋ฐ์ํ
https://level.goorm.io/exam/160279/%EA%B1%B0%EB%A6%AC%EB%91%90%EA%B8%B0/quiz/1
๊ตฌ๋ฆLEVEL
๋์ด๋๋ณ ๋ค์ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํจ์ผ๋ก์จ SW ์ญ๋์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
level.goorm.io
๊ตฌ๋ฆ ๋ ๋ฒจ 3.
DP์ ๊ฒฝ์ฐ์ ์ ์ ์ฒ๋ฆฌ ๊ณ์ฐ๊ฐ(?)์ ์ ์ ํ ์ฌ์ฉํด์ผ ํ๋ค
๊ตฌ๋ฆ์ ์ด๋ฐ ์ ํ์ด ๋ง์๊ฐ.. ์ต์ํ์ง ์์์ ๋ ์ค๋๊ฑธ๋ฆฐ๋ค ใ ใ
๊ฐ ์ํ ๋ณ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ์์ dp์ ์ ์ ํ ๋ํด์ค์ผ ํ๋ค!
dp[i][j] -> i๋ฒ์งธ ์ค์ ์ํ๊ฐ j(0~5)์ผ ๋์ ๋์ ๊ฒฝ์ฐ์ ์๋ก ํด๊ฒฐํ๋ค.
๋์ ํ์ด
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n=0;
int mod = 100000007;
int dp[100001][5] = {0,}; // i๋ฒ์งธ ์ค์ ์ํ๊ฐ j์ผ๋, ๊ฒฝ์ฐ์ ์
int answer = 0;
// 0 {0,0,0}; // 5๊ฒฝ์ฐ์ ๋ค์์ ์ฌ ์ ์์
// 1 {1,0,0}; // 3
// 2 {0,1,0}; // 4
// 3 {0,0,1}; // 3
// 4 {1,0,1}; // 2
cin >> n;
for(int j=0; j<5; ++j){
dp[1][j] = 1; // 1๋ฒ์งธ ์ค ์ํ ์ด๊ธฐํ
}
for(int i=2; i<=n; ++i){
dp[i][0] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2] + dp[i-1][3] + dp[i-1][4]) % mod;
dp[i][1] = (dp[i-1][0] + dp[i-1][2] + dp[i-1][3]) % mod;
dp[i][2] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][3] + dp[i-1][4]) % mod;
dp[i][3] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2]) % mod;
dp[i][4] = (dp[i-1][0] + dp[i-1][2]) % mod;
}
for(int j=0; j<5; ++j){
answer += dp[n][j];
answer %= mod;
}
cout << answer;
return 0;
}
728x90
๋ฐ์ํ
'๐ ์๊ณ ๋ฆฌ์ฆ > groom' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/groom] Lv.2 : ์ฅ๋ง (0) | 2025.04.18 |
---|---|
[C++/groom] Lv.1 : ์ธ๊ณต์ง๋ฅ ์ฒญ์๊ธฐ (0) | 2025.04.18 |