๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐˜š๐˜ญ๐˜ฐ๐˜ธ ๐˜ฃ๐˜ถ๐˜ต ๐˜ด๐˜ต๐˜ฆ๐˜ข๐˜ฅ๐˜บ

[๋ฐฑ์ค€] 1003๋ฒˆ: ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜ - C++ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์ค€๋น„/๋ฐฑ์ค€

[๋ฐฑ์ค€] 1003๋ฒˆ: ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜ - C++

.23 2022. 7. 5. 00:12
๋ฌธ์ œ

๋‹ค์Œ ์†Œ์Šค๋Š” N๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” C++ ํ•จ์ˆ˜์ด๋‹ค.

int fibonacci(int n) {
    if (n == 0) {
        printf("0");
        return 0;
    } else if (n == 1) {
        printf("1");
        return 1;
    } else {
        return fibonacci(nโ€1) + fibonacci(nโ€2);
    }
}

fibonacci(3)์„ ํ˜ธ์ถœํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์ด ์ผ์–ด๋‚œ๋‹ค.

 

  • fibonacci(3)์€ fibonacci(2)์™€ fibonacci(1) (์ฒซ ๋ฒˆ์งธ ํ˜ธ์ถœ)์„ ํ˜ธ์ถœํ•œ๋‹ค.
  • fibonacci(2)๋Š” fibonacci(1) (๋‘ ๋ฒˆ์งธ ํ˜ธ์ถœ)๊ณผ fibonacci(0)์„ ํ˜ธ์ถœํ•œ๋‹ค.
  • ๋‘ ๋ฒˆ์งธ ํ˜ธ์ถœํ•œ fibonacci(1)์€ 1์„ ์ถœ๋ ฅํ•˜๊ณ  1์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • fibonacci(0)์€ 0์„ ์ถœ๋ ฅํ•˜๊ณ , 0์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • fibonacci(2)๋Š” fibonacci(1)๊ณผ fibonacci(0)์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ณ , 1์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ํ˜ธ์ถœํ•œ fibonacci(1)์€ 1์„ ์ถœ๋ ฅํ•˜๊ณ , 1์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • fibonacci(3)์€ fibonacci(2)์™€ fibonacci(1)์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ณ , 2๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

1์€ 2๋ฒˆ ์ถœ๋ ฅ๋˜๊ณ , 0์€ 1๋ฒˆ ์ถœ๋ ฅ๋œ๋‹ค. N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, fibonacci(N)์„ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ, 0๊ณผ 1์ด ๊ฐ๊ฐ ๋ช‡ ๋ฒˆ ์ถœ๋ ฅ๋˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์˜ ๊ฐœ์ˆ˜ T๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ํ•œ ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 40๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜ ๋˜๋Š” 0์ด๋‹ค.

 

์ถœ๋ ฅ

๊ฐ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋งˆ๋‹ค 0์ด ์ถœ๋ ฅ๋˜๋Š” ํšŸ์ˆ˜์™€ 1์ด ์ถœ๋ ฅ๋˜๋Š” ํšŸ์ˆ˜๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค.


๋™์ ๊ณ„ํš๋ฒ•์„ ์‚ฌ์šฉํ•œ ๋ฌธ์ œ.

์‹œ๊ฐ„ ์ œํ•œ์ด 0.25์ดˆ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ํ’€์ด ๋ฐฉ๋ฒ•์ธ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•ด์„œ ํ’€๋ฉด ์•ˆ๋˜๊ณ , bottom-up ๋ฐฉ์‹์œผ๋กœ ํ’€๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

 

์‹œ๊ฐ„์ด ์งง๊ธฐ ๋•Œ๋ฌธ์— ๋งค๋ฒˆ ๊ฐ’์„ ๊ตฌํ•˜๋ ค ํ•˜๋ฉด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•ด์„œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด๋ฏ€๋กœ ๋ฏธ๋ฆฌ ๋ชจ๋“  ๊ฐ’์— ๋Œ€ํ•ด ๊ธฐ๋กํ•ด๋†“๊ณ  ๊ฐ’์„ ์ถœ๋ ฅํ•ด์•ผ๋œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ๊ทธ๋ ‡๊ฒŒ ์•ˆํ’€์–ด๋„ C++๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š๋”๋ผ

 

์ฝ”๋“œ
#include <cstdio>
#define MAX 41

void DP(int num);

int main(void) {
    int T;
    scanf("%d", &T);

    for(int i = 0; i < T; i++) {
        int num;
        scanf("%d", &num);
        DP(num);
    }
    return 0;
}

void DP(int num) {
    int count[MAX][2];
    count[0][0] = 1, count[0][1] = 0;
    count[1][0] = 0, count[1][1] = 1;

    for(int i = 2; i <= num; i++) {
        count[i][0] = count[i - 1][0] + count[i - 2][0];
        count[i][1] = count[i - 1][1] + count[i - 2][1];
    }
    printf("%d %d\n", count[num][0], count[num][1]);
}
Comments