ํ์๊ฐ ๋๋ฌ๊ณ , ์ด์ ์ ์๋ฅผ ํ๋ ์๊ฐ์ด๋ค. ๋ชจ๋ ์ฌ๋์ ์ง์ฌ๊ฐํ ํ์ ํ๋์ ํ ๋ฉด์ ์์์๋ค.
์๋ฆฌ๋ฅผ ๋ฒ์ด๋์ง ์๊ณ ์ ์๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ์๋ ์ด ๋ช ๊ฐ์ง์ผ๊น?
๊ฐ ์ฌ๋๋ค์ ์์ ์ ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ ์๋ ์ฌ๋๋ค๊ณผ ์ ์๋ฅผ ํ ์ ์๋ค. (์ ํ ์๋ ์๋ค)
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ์์ ์ฐธ์ํ ์ฌ๋์ ์ n (1 ≤ n ≤ 10,000,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ์๊ฐ ๋งค์ฐ ์ปค์ง ์ ์๊ธฐ ๋๋ฌธ์, ๋ง์ง๋ง ์๋ฆฌ๋ง ์ถ๋ ฅํ๋ค.
ํ์ด
i๋ช ์ ์ฌ๋๋ค์ด ์ ์ํ๋ ๊ฒฝ์ฐ์ ์ ์ค
1. ๋ง์ง๋ง ๋ ์ฌ๋์ด ์ ์ํ๋ ๊ฒฝ์ฐ์ ์
2. ๋ง์ง๋ง ๋ ์ฌ๋์ด ์ ์ํ์ง ์๋ ๊ฒฝ์ฐ์ ์
๋ผ๋ฉด,
i+1๋ช ์ ์ฌ๋๋ค์ด ์ ์ํ๋ ๊ฒฝ์ฐ์ ์๋
ใฑ. 1๋ฒ && i๋ฒ ์ฌ๋๊ณผ i+1๋ฒ ์ฌ๋์ด ์ ์ ๋ชปํจ
ใด. 2๋ฒ && i๋ฒ ์ฌ๋๊ณผ i+1๋ฒ ์ฌ๋์ด ์ ์ ํจ
ใท. 2๋ฒ && i๋ฒ ์ฌ๋๊ณผ i+1๋ฒ ์ฌ๋์ด ์ ์ ์ํจ
= ใฑ+ใด+ใท ํฉ์ผ๋ก ๊ตฌํด์ง๋ค
์ด๋ ใด์ 1๋ฒ์ด ๋๊ณ ใฑ+ใท์ 2๋ฒ์ด ๋๋ค.
์ฝ๋์์๋ pair ๋ฒกํฐ dp[i] = {1๋ฒ, 2๋ฒ}๋ก ๋๊ณ ๊ณ์ฐํ๋ค.
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
using namespace std;
typedef pair<int,int> ci;
const int INF = 10000001;
int main() {
int n;
cin >> n;
vector<ci>dp(INF);
dp[1] = {0,0};
dp[2] = {1,1};
for(int i=3; i<INF; i++) {
ci before = dp[i-1];
int yes = before.second % 10; // ๋ง์ง๋ง ๋ ์ฌ๋์ด ์
์ ํจ
int no = (before.first+before.second) % 10; // ์
์ ์ํจ
dp[i] = {yes, no};
}
cout << (dp[n].first + dp[n].second)%10 << "\n";
return 0;
}
'๐๏ธ ICPC Sinchon > Dynamic Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 10164๋ฒ: ๊ฒฉ์์์ ๊ฒฝ๋ก (0) | 2024.08.15 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 1699๋ฒ: ์ ๊ณฑ์์ ํฉ (0) | 2024.08.14 |
[BOJ][C++] ๋ฐฑ์ค 2293๋ฒ: ๋์ 1 (0) | 2023.11.24 |
[BOJ][C++] ๋ฐฑ์ค 11052๋ฒ: ์นด๋ ๊ตฌ๋งคํ๊ธฐ (0) | 2023.11.20 |
[BOJ][C++] ๋ฐฑ์ค 1890๋ฒ: ์ ํ (0) | 2023.11.14 |