๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 1309๋ฒˆ - ๋™๋ฌผ์›

by dkswnkk 2022. 9. 27.

๋ฌธ์ œ

1309๋ฒˆ: ๋™๋ฌผ์›

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

www.acmicpc.net

์ฝ”๋“œ

#include <iostream>
#define MOD 9901
using namespace std;

int dp[100001][3];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    dp[0][0] = 1;   // ์‚ฌ์ž๋ฅผ ๋†“์ง€์•Š๋Š” ๊ฒฝ์šฐ
    dp[0][1] = 1;   // ์‚ฌ์ž๋ฅผ ์™ผ์ชฝ์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ
    dp[0][2] = 1;   // ์‚ฌ์ž๋ฅผ ์˜ค๋ฅธ์ชฝ์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐz
    
    int N; cin>>N;
    for(int i=1; i<N; i++){
        dp[i][0] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2]) % MOD;
        dp[i][1] = (dp[i-1][0] + dp[i-1][2]) % MOD;
        dp[i][2] = (dp[i-1][0] + dp[i-1][1]) % MOD;
    }
    cout<<(dp[N-1][0] + dp[N-1][1] + dp[N-1][2]) % MOD;
}

ํ’€์ด

DP๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ์˜ ์ฃผ์„์—๋„ ์ ํ˜€ ์žˆ๋“ฏ์ด, ๋ฐฐ์—ด์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • dp[index][0]: ํ•ด๋‹น ์นธ์— ์‚ฌ์ž๋ฅผ ๋†“์ง€ ์•Š์„๋•Œ ์ง€๊ธˆ๊นŒ์ง€ ์„ ํƒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜
  • dp[index][1]: ํ•ด๋‹น ์นธ์˜ ์™ผ์ชฝ์— ์‚ฌ์ž๋ฅผ ๋†“์•˜์„๋•Œ ์ง€๊ธˆ๊นŒ์ง€ ์„ ํƒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜
  • dp[index][2]: ํ•ด๋‹น ์นธ์˜ ์˜ค๋ฅธ์ชฝ์— ์‚ฌ์ž๋ฅผ ๋†“์•˜์„๋•Œ ์ง€๊ธˆ๊นŒ์ง€ ์„ ํƒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜

๊ทธ ๋’ค, ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  • dp[i][0] = (dp[i-1][0] + dp[i-1][1] + dp[i-1][2]) % MOD;
    • ํ˜„์žฌ ์นธ์— ์‚ฌ์ž๋ฅผ ๋†“์ง€ ์•Š๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜ =  (์ด์ „์นธ์˜ ์‚ฌ์ž๋ฅผ ๋†“์ง€์•Š๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜ + ์ด์ „์นธ์˜ ์™ผ์ชฝ์— ์‚ฌ์ž๋ฅผ ๋†“๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜ + ์ด์ „์นธ์˜ ์˜ค๋ฅธ์ชฝ์— ์‚ฌ์ž๋ฅผ ๋†“๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜)
  • dp[i][1] = (dp[i-1][0] + dp[i-1][2]) % MOD;
    • ํ˜„์žฌ์นธ์˜ ์™ผ์ชฝ์— ์‚ฌ์ž๋ฅผ ๋†“๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜ = (์ด์ „์นธ์— ์‚ฌ์ž๋ฅผ ๋†“์ง€ ์•Š๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜ + ์ด์ „์นธ์˜ ์˜ค๋ฅธ์ชฝ์— ์‚ฌ์ž๋ฅผ ๋†“๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜)
  • dp[i][2] = (dp[i-1][0] + dp[i-1][1]) % MOD;
    • ํ˜„์žฌ์นธ์˜ ์˜ค๋ฅธ์ชฝ์— ์‚ฌ์ž๋ฅผ ๋†“๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜ = (์ด์ „์นธ์— ์‚ฌ์ž๋ฅผ ๋†“์ง€ ์•Š๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜ + ์ด์ „์นธ์˜ ์™ผ์ชฝ์— ์‚ฌ์ž๋ฅผ ๋†“๋Š” ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜)

๊ทธ ๋’ค, ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜ = (ํ˜„์žฌ ์นธ์— ์‚ฌ์ž๋ฅผ ๋†“์ง€ ์•Š๋Š” ๊ฒฝ์šฐ + ํ˜„์žฌ ์นธ์˜ ์™ผ์ชฝ์— ์‚ฌ์ž๋ฅผ ๋†“๋Š” ๊ฒฝ์šฐ + ํ˜„์žฌ์˜ ์˜ค๋ฅธ์ชฝ์— ์‚ฌ์ž๋ฅผ ๋†“๋Š” ๊ฒฝ์šฐ)๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€