๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/BOJ

[C++/BOJ] 1309 : ๋™๋ฌผ์› (DP)

๋ฌธ์ œ

์–ด๋–ค ๋™๋ฌผ์›์— ๊ฐ€๋กœ๋กœ ๋‘์นธ ์„ธ๋กœ๋กœ N์นธ์ธ ์•„๋ž˜์™€ ๊ฐ™์€ ์šฐ๋ฆฌ๊ฐ€ ์žˆ๋‹ค.

์ด ๋™๋ฌผ์›์—๋Š” ์‚ฌ์ž๋“ค์ด ์‚ด๊ณ  ์žˆ๋Š”๋ฐ ์‚ฌ์ž๋“ค์„ ์šฐ๋ฆฌ์— ๊ฐ€๋‘˜ ๋•Œ, ๊ฐ€๋กœ๋กœ๋„ ์„ธ๋กœ๋กœ๋„ ๋ถ™์–ด ์žˆ๊ฒŒ ๋ฐฐ์น˜ํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์ด ๋™๋ฌผ์› ์กฐ๋ จ์‚ฌ๋Š” ์‚ฌ์ž๋“ค์˜ ๋ฐฐ์น˜ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ๊ณจ๋จธ๋ฆฌ๋ฅผ ์•“๊ณ  ์žˆ๋‹ค.

๋™๋ฌผ์› ์กฐ๋ จ์‚ฌ์˜ ๋จธ๋ฆฌ๊ฐ€ ์•„ํ”„์ง€ ์•Š๋„๋ก ์šฐ๋ฆฌ๊ฐ€ 2*N ๋ฐฐ์—ด์— ์‚ฌ์ž๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐ€์ง€์ธ์ง€๋ฅผ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด ์ฃผ๋„๋ก ํ•˜์ž. ์‚ฌ์ž๋ฅผ ํ•œ ๋งˆ๋ฆฌ๋„ ๋ฐฐ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ํ•˜๋‚˜์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ์นœ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์šฐ๋ฆฌ์˜ ํฌ๊ธฐ N(1≤N≤100,000)์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์‚ฌ์ž๋ฅผ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ 9901๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ๋ผ.

 


 

๋ฐฑ์ค€ ์‹ค๋ฒ„1.

dp์ธ์ง€ dfs์ธ์ง€ ์ž ๊น ํ—ท๊ฐˆ๋ ธ์ง€๋งŒ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š”๊ฑฐ๋‹ˆ๊นŒ dp๋กœ ํ’€์—ˆ๋‹ค!

์ ํ™”์‹ ๊ตฌํ•˜๋ ค๊ณ  ๋ง‰ ์“ฐ๋Š”๋ฐ ์ž˜ ์•ˆ๊ตฌํ•ด์ ธ์„œ ์–ด๋ ค์› ๋‹ค.

 

give me ์ ํ™”์‹

 

์•ผ๋งค๋กœ ๋“ค์–ด๋งž๋Š” ์‹์„ ์ฐพ์•˜๋‹ค.

 

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];
}