๐Ÿ• Baaaaaarking/0x10๊ฐ• - ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

[BOJ][C++] ๋ฐฑ์ค€ 2193๋ฒˆ: ์ด์ฐฌ์ˆ˜

์„ ๋‹ฌ 2023. 5. 8. 23:28
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/2193

 

2193๋ฒˆ: ์ด์นœ์ˆ˜

0๊ณผ 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์ˆ˜๋ฅผ ์ด์ง„์ˆ˜๋ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์ง„์ˆ˜ ์ค‘ ํŠน๋ณ„ํ•œ ์„ฑ์งˆ์„ ๊ฐ–๋Š” ๊ฒƒ๋“ค์ด ์žˆ๋Š”๋ฐ, ์ด๋“ค์„ ์ด์นœ์ˆ˜(pinary number)๋ผ ํ•œ๋‹ค. ์ด์นœ์ˆ˜๋Š” ๋‹ค์Œ์˜ ์„ฑ์งˆ์„ ๋งŒ์กฑํ•œ๋‹ค. ์ด์นœ์ˆ˜๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š

www.acmicpc.net

 

๋ฌธ์ œ

0๊ณผ 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์ˆ˜๋ฅผ ์ด์ง„์ˆ˜๋ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์ง„์ˆ˜ ์ค‘ ํŠน๋ณ„ํ•œ ์„ฑ์งˆ์„ ๊ฐ–๋Š” ๊ฒƒ๋“ค์ด ์žˆ๋Š”๋ฐ, ์ด๋“ค์„ ์ด์นœ์ˆ˜(pinary number)๋ผ ํ•œ๋‹ค. ์ด์นœ์ˆ˜๋Š” ๋‹ค์Œ์˜ ์„ฑ์งˆ์„ ๋งŒ์กฑํ•œ๋‹ค.

  1. ์ด์นœ์ˆ˜๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. ์ด์นœ์ˆ˜์—์„œ๋Š” 1์ด ๋‘ ๋ฒˆ ์—ฐ์†์œผ๋กœ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, 11์„ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด 1, 10, 100, 101, 1000, 1001 ๋“ฑ์ด ์ด์นœ์ˆ˜๊ฐ€ ๋œ๋‹ค. ํ•˜์ง€๋งŒ 0010101์ด๋‚˜ 101101์€ ๊ฐ๊ฐ 1, 2๋ฒˆ ๊ทœ์น™์— ์œ„๋ฐฐ๋˜๋ฏ€๋กœ ์ด์นœ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค.

N(1 ≤ N ≤ 90)์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, N์ž๋ฆฌ ์ด์นœ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— N์ž๋ฆฌ ์ด์นœ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

ํ’€์ด

i-1์ž๋ฆฌ ์ด์ฐฌ์ˆ˜ ์ค‘ 0์œผ๋กœ ๋๋‚˜๋Š” ์ˆ˜ ๋’ค์— 0์ด๋‚˜ 1์„ ๋ถ™์—ฌ์„œ i์ž๋ฆฌ ์ด์ฐฌ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

i-1์ž๋ฆฌ ์ด์ฐฌ์ˆ˜ ์ค‘ 1๋กœ ๋๋‚˜๋Š” ์ˆ˜ ๋’ค์— 0์„ ๋ถ™์—ฌ์„œ i์ž๋ฆฌ ์ด์ฐฌ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

 

๋”ฐ๋ผ์„œ i-1์ž๋ฆฌ ์ด์ฐฌ์ˆ˜ ๊ฐฏ์ˆ˜๋ฅผ ์•ˆ๋‹ค๋ฉด i์ž๋ฆฌ ์ด์ฐฌ์ˆ˜ ๊ฐฏ์ˆ˜๋„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค

์ด์— dp๋ฒกํ„ฐ๋ฅผ ์„ ์–ธํ•˜์—ฌ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ด์šฉํ•˜์˜€๋‹ค

 

dp[0][i] = 0์œผ๋กœ ๋๋‚˜๋Š” i์ž๋ฆฌ ์ด์ฐฌ์ˆ˜ ๊ฐฏ์ˆ˜
dp[1][i] = 1๋กœ ๋๋‚˜๋Š” i์ž๋ฆฌ ์ด์ฐฌ์ˆ˜ ๊ฐฏ์ˆ˜

#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<vector<long long>> dp(2, vector<long long>(91)); 
    dp[0][1] = 0;
    dp[1][1] = 1;
    for(int i=2; i<=90; i++) {
        dp[0][i] = dp[0][i-1] + dp[1][i-1];
        dp[1][i] = dp[0][i-1];
    }
    
    int n;
    cin >> n;
    
    cout << dp[0][n] + dp[1][n];
    
    return 0;
}
๋ฐ˜์‘ํ˜•