코딩 테스트/Baekjoon

S3 1003번. 피보나치 함수

  • -
728x90
반응형

문제 보기 : 1003번: 피보나치 함수 (acmicpc.net)


문제

다음 소스는 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이 각각 몇 번 출력되는지 구하는 프로그램을 작성하시오.


조건

시간 제한 메모리 제한
0.25초 128MB

작성 코드

def fib(n):
    global zero, one
    if n == 0:
        zero += 1
        return 0
    elif n == 1:
        one +=1
        return 1
    else :
        return fib(n-1)+fib(n-2)

t = int(input())
for i in range(t):
    zero = 0
    one = 0
    n = int(input())
    fib(n)
    print(zero, one)
 

이 코드로 제출한 결과, 시간초과가 뜸.

질문 게시판에서 찾아봤는데

재귀식을 사용한 피보나치 함수의 시간복잡도는 O(2^N)입니다.
그런데 해당 문제에서 N의 최대 제한이 40이므로 시간초과가 발생합니다.
다이나믹 프로그래밍을 사용하셔서 풀이하는 것을 권장드립니다.

이렇다고 함....

근데 다이나믹 프로그래밍은 아카데미에서 배운거 다 까먹어서(ㅠㅠ) 다시 공부해야하기 때문에 일단 이 문제는 패스..!

320x100
728x90

'코딩 테스트 > Baekjoon' 카테고리의 다른 글

B2 10811번. 바구니 뒤집기  (0) 2024.07.15
B2 10813. 공 바꾸기  (0) 2024.07.15
B3 10810번. 공 넣기  (0) 2024.07.15
B1 1110. 더하기 사이클  (0) 2024.07.14
S3 1002번. 터렛  (0) 2024.07.13
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.