프로그래머스 레벨 1단계 문제인 피보나치 수열 코들를 작성하는데 계속 5초를 넘겨서 동작했다..


당황했다. 답은 맞더라도 시간이 오래 걸리는 코드를 작성했기 때문이다.


처음에 작성한 코드는 아무 생각없이 정의대로 작성했다.


def fivonaci(num):

if num > 1:

return fivonaci(num-1) + fivonaci(num-2)

else:

return num



간과한 점....


num이 커졌을 때 함수를 호출하는 것은 오랜시간이 걸린다.


실제로 수가 커졌을 때 다음과 같은 에러가 발생한다.


RecursionError: maximum recursion depth exceeded in comparison



그 다음에는 갑자기 generator 개념이 떠오르면서 이 개념을 사용해볼까 생각했지만 yield를 사용하면 generator를 반환하기 때문에 뚱딴지 같은 생각이었다.



그냥 단순하게 반복문으로 해결하는게 이 문제에서는 가장 시간을 단축 할 수 있었다.



밑의 코드를 다시 작성했다.


내가 작성한 코드



다른 분들의 코드 중에는


def fibonacci(num):
    a, b = 0, 1
    for i in range(num):
        a, b = b, a+b
    return a


출처: https://programmers.co.kr/  naru 님 답안


답안이 더 간결하고 먼가 파이썬스러운 답안인거 같아서 마음에 들었다.



더 좋은 해결방안이나 코드는 언제나 감사합니다! 



  1. ss 2018.01.02 17:40 신고

    틀렸다고 뜨는데여???

  2. bigman 2018.08.08 21:29 신고

    밑에 두개 코드 짱이네요

  3. ㅇㅇ 2018.08.16 01:51 신고

    감사합니다
    작성자분께서 만드신 코드중에서 return은 무슨 역할을 하는건가요?? 아직 초보라 잘 모르겠네요... ㅜㅜ

    • ㅇㅇ 2018.08.16 02:06 신고

      그리고 x,y = y,x+y를
      두 줄에 걸쳐서 x = y
      y = x+y 로 쓰면 값이 다르게 나오는데 왜 그런 건가요??

    • jordan_bae jordan17 2018.10.19 01:05 신고

      return 은 함수의 반환값을 의미 합니다.

      해당 함수를 호출했을 때 return에 쓰여진 값이 반환되어 출력되거나 다른 변수에 할당하는데 쓰여질 수 있습니다.

    • jordan_bae jordan17 2018.10.19 01:08 신고

      1)
      x,y = y, x+ y
      이 첫번째 줄의 코드는 x,y 값이 새롭게 할당되기 전의 값들이고

      말씀하신
      2)
      x=y
      y = x+y

      같은 경우는 x=y 줄에서 x값의 y값으로 할당되면서 위와 아래의 값이 달라지게 됩니다. 직접 값을 넣어보면 x=3, y=4라면
      1번에서는 x,y=3,(3+4) 이고, 2번에서는 첫 번째줄에서 x=4가 되고, 두번째 줄에서 y= 4+4가 되어서 값이 다르게 나오게 됩니다.

+ Recent posts