๐Ÿ•๏ธ ICPC Sinchon/Dynamic Programming

[BOJ][C++] ๋ฐฑ์ค€ 8394๋ฒˆ: ์•…์ˆ˜

์„ ๋‹ฌ 2024. 8. 14. 03:18
๋ฐ˜์‘ํ˜•

ํšŒ์˜๊ฐ€ ๋๋‚ฌ๊ณ , ์ด์ œ ์•…์ˆ˜๋ฅผ ํ•˜๋Š” ์‹œ๊ฐ„์ด๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์€ ์ง์‚ฌ๊ฐํ˜• ํƒ์ž ํ•˜๋‚˜์˜ ํ•œ ๋ฉด์— ์•‰์•„์žˆ๋‹ค.

์ž๋ฆฌ๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ณ  ์•…์ˆ˜๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋Š” ์ด ๋ช‡ ๊ฐ€์ง€์ผ๊นŒ?

๊ฐ ์‚ฌ๋žŒ๋“ค์€ ์ž์‹ ์˜ ์™ผ์ชฝ์ด๋‚˜ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ์•…์ˆ˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. (์•ˆ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค)

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํšŒ์˜์— ์ฐธ์„ํ•œ ์‚ฌ๋žŒ์˜ ์ˆ˜ 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;
}

 

 

 

๋ฐ˜์‘ํ˜•