https://www.acmicpc.net/problem/1309
๋ฌธ์
์ด๋ค ๋๋ฌผ์์ ๊ฐ๋ก๋ก ๋์นธ ์ธ๋ก๋ก N์นธ์ธ ์๋์ ๊ฐ์ ์ฐ๋ฆฌ๊ฐ ์๋ค.
์ด ๋๋ฌผ์์๋ ์ฌ์๋ค์ด ์ด๊ณ ์๋๋ฐ ์ฌ์๋ค์ ์ฐ๋ฆฌ์ ๊ฐ๋ ๋, ๊ฐ๋ก๋ก๋ ์ธ๋ก๋ก๋ ๋ถ์ด ์๊ฒ ๋ฐฐ์นํ ์๋ ์๋ค. ์ด ๋๋ฌผ์ ์กฐ๋ จ์ฌ๋ ์ฌ์๋ค์ ๋ฐฐ์น ๋ฌธ์ ๋๋ฌธ์ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์๊ณ ์๋ค.
๋๋ฌผ์ ์กฐ๋ จ์ฌ์ ๋จธ๋ฆฌ๊ฐ ์ํ์ง ์๋๋ก ์ฐ๋ฆฌ๊ฐ 2*N ๋ฐฐ์ด์ ์ฌ์๋ฅผ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋ช ๊ฐ์ง์ธ์ง๋ฅผ ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด ์ฃผ๋๋ก ํ์. ์ฌ์๋ฅผ ํ ๋ง๋ฆฌ๋ ๋ฐฐ์นํ์ง ์๋ ๊ฒฝ์ฐ๋ ํ๋์ ๊ฒฝ์ฐ์ ์๋ก ์น๋ค๊ณ ๊ฐ์ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฐ๋ฆฌ์ ํฌ๊ธฐ N(1≤N≤100,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ์๋ฅผ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ 9901๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ.
ํ์ด
๋ค๋ก๊ตฌ๋ฅด๊ณ ๋ฌผ๊ตฌ๋๋ฌด์๊ธฐํ๋ฉด์ ๋ด๋ ๋์ ๊ณํ๋ฒ ๋ฌธ์
dp[i][j]= i๋ฒ์งธ ์นธ ๋๊ฐ์ ์ฌ์๋ฅผ j ํํ๋ก ๋ฃ์ ์ ์๋ ๊ฒฝ์ฐ์ ์
j=0 -> ์ผ์ชฝ 0๋ง๋ฆฌ ์ค๋ฅธ์ชฝ 0๋ง๋ฆฌ
j=1 -> ์ผ์ชฝ 0๋ง๋ฆฌ ์ค๋ฅธ์ชฝ 1๋ง๋ฆฌ
j=2 -> ์ผ์ชฝ 1๋ง๋ฆฌ ์ค๋ฅธ์ชฝ 0๋ง๋ฆฌ
์ด๋ ๊ฒ ํ๋ฉด
์ง์ (๋ฐ๋ก ์)์นธ์ด ์ผ0 ์ค0 (j=0) -> ์ง๊ธ์นธ์ ๋ชจ๋ ํํ 3๊ฐ์ง ๊ฐ๋ฅ
์ง์ ์นธ์ด ์ผ0 ์ค1 (j=1)
์ง์ ์นธ | xo | xo | xo | xo
ํ์ฌ ์นธ | xx | xo | ox | oo
4๋ฒ์งธ ๊ฒฝ์ฐ ์ค ์ผ0์ค0(j=0), ์ค1์ผ0(j=2) ๋๊ฐ์ง ๊ฒฝ์ฐ๋ง ๊ฐ๋ฅ
์ง์ ์นธ์ด ์ผ1 ์ค0 (j=2)
์ผ0์ค0(j=0), ์ผ0์ค1(j=1) ๋๊ฐ์ง ๊ฒฝ์ฐ๋ง ๊ฐ๋ฅ
์ด๋ ๊ฒ ๋ณผ ์ ์๋ค. ์ฆ,
dp[i][0] = dp[i-1][0] + dp[i-1][1] + dp[i-1][2]
dp[i][1] = dp[i-1][0] + dp[i-1][2]
dp[i][2] = dp[i-1][0] + dp[i-1][1]
์ผ๋ก ์ ํ์์ ์ธ์ธ ์ ์๊ฒ ๋ค
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
using namespace std;
const int INF = 9901;
int main() {
int n;
cin >> n;
vector<vector<int>> dp(n+1, vector<int>(4));
dp[1] = {1,1,1};
for(int i=2; i<=n; i++) {
dp[i][0] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2])%INF;
dp[i][1] = (dp[i-1][0] + dp[i-1][2])%INF;
dp[i][2] = (dp[i-1][0] + dp[i-1][1])%INF;
}
cout << (dp[n][0] + dp[n][1] + dp[n][2])%INF;
return 0;
}
'๐๏ธ ICPC Sinchon > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 11052๋ฒ: ์นด๋ ๊ตฌ๋งคํ๊ธฐ (0) | 2023.11.20 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 1890๋ฒ: ์ ํ (0) | 2023.11.14 |
[BOJ][C++] ๋ฐฑ์ค 10844๋ฒ: ์ฌ์ด ๊ณ๋จ ์ (0) | 2023.11.08 |
[BOJ][C++] ๋ฐฑ์ค 1912๋ฒ: ์ฐ์ํฉ (0) | 2023.11.03 |
[BOJ][C++] ๋ฐฑ์ค 2491๋ฒ: ์์ด (0) | 2023.04.17 |