๋ฌธ์
์ด๋ค ๋๋ฌผ์์ ๊ฐ๋ก๋ก ๋์นธ ์ธ๋ก๋ก N์นธ์ธ ์๋์ ๊ฐ์ ์ฐ๋ฆฌ๊ฐ ์๋ค.
์ด ๋๋ฌผ์์๋ ์ฌ์๋ค์ด ์ด๊ณ ์๋๋ฐ ์ฌ์๋ค์ ์ฐ๋ฆฌ์ ๊ฐ๋ ๋, ๊ฐ๋ก๋ก๋ ์ธ๋ก๋ก๋ ๋ถ์ด ์๊ฒ ๋ฐฐ์นํ ์๋ ์๋ค. ์ด ๋๋ฌผ์ ์กฐ๋ จ์ฌ๋ ์ฌ์๋ค์ ๋ฐฐ์น ๋ฌธ์ ๋๋ฌธ์ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์๊ณ ์๋ค.
๋๋ฌผ์ ์กฐ๋ จ์ฌ์ ๋จธ๋ฆฌ๊ฐ ์ํ์ง ์๋๋ก ์ฐ๋ฆฌ๊ฐ 2*N ๋ฐฐ์ด์ ์ฌ์๋ฅผ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ์ ์๊ฐ ๋ช ๊ฐ์ง์ธ์ง๋ฅผ ์์๋ด๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด ์ฃผ๋๋ก ํ์. ์ฌ์๋ฅผ ํ ๋ง๋ฆฌ๋ ๋ฐฐ์นํ์ง ์๋ ๊ฒฝ์ฐ๋ ํ๋์ ๊ฒฝ์ฐ์ ์๋ก ์น๋ค๊ณ ๊ฐ์ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฐ๋ฆฌ์ ํฌ๊ธฐ N(1≤N≤100,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ์๋ฅผ ๋ฐฐ์นํ๋ ๊ฒฝ์ฐ์ ์๋ฅผ 9901๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ.
๋ฐฑ์ค ์ค๋ฒ1.
dp์ธ์ง dfs์ธ์ง ์ ๊น ํท๊ฐ๋ ธ์ง๋ง ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋๊ฑฐ๋๊น dp๋ก ํ์๋ค!
์ ํ์ ๊ตฌํ๋ ค๊ณ ๋ง ์ฐ๋๋ฐ ์ ์๊ตฌํด์ ธ์ ์ด๋ ค์ ๋ค.
์ผ๋งค๋ก ๋ค์ด๋ง๋ ์์ ์ฐพ์๋ค.
dp[i] = dp[i-1]*2 + dp[i-2]
๊ตฌ๊ธ๋งํด๋ณด๋ ์ด๊ฒ ์ ํํ ์ ํ์์ ์๋์ง๋ง ์ด๊ฑธ๋ก ํ์ด๋ ๋ง๋ค๊ณ ํ๋ค(?)
์ ํํ ์์ ๋์ถํด๋ด๊ธฐ ์ํด ์ฒ์ฌ ๋ธ๋ก๊ฑฐ๋ค์ ๊ณผ์ ์ ๋ฐ๋ผ๊ฐ๋ณด์๋๋ฐ... ๋ด ๋จธ๋ฆฌ๋ก๋ ์ดํด๋ฅผ ๋ชป ํ๊ฒ ๋ค.
๊ทธ๋๊น ์ฌ์๊ฐ ์๋ ์ด์ ๋ค์ ์ด์๋ ๊ฒฝ์ฐ์ ์๊ฐ 3๊ฐ์ง๊ณ ,
์ฌ์๊ฐ ์๋ค๋ฉด ๊ทธ ๋ค์ ์ด์ ๊ฒฝ์ฐ์ ์๋ 2๊ฐ์ง์ธ ๊ฒ ๊น์ง๋ ์ดํด๋ฅผ ํ๋๋ฐ..
๋์ค์ ๋ค์ ํ์ด๋ณด๋๊ฑธ๋ก.
๋์ ํ์ด
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int dp[100001] = {0,};
dp[0] = 3;
dp[1] = 7;
for (int i = 2; i < n; ++i){
dp[i] = (dp[i - 1] * 2 + dp[i - 2])%9901;
}
cout << dp[n - 1];
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 1158 : ์์ธํธ์ค ๋ฌธ์ (Queue) (0) | 2023.03.03 |
---|---|
[C++/BOJ] 7562 : ๋์ดํธ์ ์ด๋ (BFS) (0) | 2023.03.02 |
[C++/BOJ] 2225 : ํฉ๋ถํด (DP) (0) | 2023.02.23 |
[C++/BOJ] 1697 : ์จ๋ฐ๊ผญ์ง (BFS) (0) | 2023.02.23 |
[C++/BOJ] 14940 : ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ (BFS) / test case (0) | 2023.02.22 |