티스토리 뷰

반응형

 - 백준 알고리즘  : https://www.acmicpc.net/problem

문제

  • 다음 소스는 N번째 피보나치 함수를 구하는 함수이다.

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이 출력되는 횟수를 공백으로 구분해서 출력한다.


예제 입력

  • 3

  • 0

  • 1

  • 3


예제 출력

  • 1 0

  • 0 1

  • 1 2


곰가드의 코드


def cal(n):
    length = len(zero)
    if n >= length:
        for i in range(length,n+1):
            zero.append(zero[i-1]+zero[i-2])
            one.append(one[i-1]+one[i-2])
        
a = int(input())

zero = [1,0,1]
one = [0,1,1]

for _ in range(a):
    k = int(input())
    cal(k)
    print(zero[k],one[k])

  • 메모이제이션을 통한 코드가 아니면 시간초과로 계속 오답으로 판단됩니다.

참고할 파이썬 코드







부족한 블로그에 방문해 주셔서 감사합니다.

잘못된 부분이나 질문이 있으시면 

댓글로 말씀해주세요.


금방 확인하고 피드백 드리겠습니다.


좋은 하루 되세요. ^^




반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함