[Python] 코딩 도장 - 피보나치 수열 구하기

Updated:

코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.

코딩 도장에서 여러 문제를 확인할 수 있습니다.

난이도 순으로 차근차근 풀어보려 합니다.


[문제: 피보나치 수열 구하기] - Lv.1

피보나치 수열이란, 첫 번째 항의 값이 0이고 두 번째 항의 값이 1일 때,

이후의 항들은 이전의 두 항을 더한 값으로 이루어지는 수열을 말한다.

예) 0, 1, 1, 2, 3, 5, 8, 13

인풋을 정수 n으로 받았을때, n 이하까지의 피보나치 수열을 출력하는 프로그램을 작성하세요.

출처: https://codingdojang.com/scode/461?answer_mode=hide


[풀이]

def fibonacci(n):
    lst = [0,1]
    
    if n == 1:
        lst = [0,1]
    else:
        while lst[-1] < n:
            lst.append(lst[-1] + lst[-2])

        if lst[-1] > n:
            lst = lst[:-1]
        
    return lst

for i in range(9):
    print(f"정수 {i}: {fibonacci(i)}")
정수 0: [0]
정수 1: [0, 1]
정수 2: [0, 1, 1, 2]
정수 3: [0, 1, 1, 2, 3]
정수 4: [0, 1, 1, 2, 3]
정수 5: [0, 1, 1, 2, 3, 5]
정수 6: [0, 1, 1, 2, 3, 5]
정수 7: [0, 1, 1, 2, 3, 5]
정수 8: [0, 1, 1, 2, 3, 5, 8]

처음 리스트에 0과 1을 기본값으로 지정한다.

리스트의 마지막 값이 입력한 정수 n보다 작으면 피보나치 수열을 반복한다.

반복을 진행하다가 마지막 값이 입력한 정수 n보다 크면 마지막 값을 삭제한다.


[추천 풀이]

n=13
a=0;b=1
print('0', end='')
while b<=n:
    print(', %d'%b, end='')
    a,b = b,a+b
0, 1, 1, 2, 3, 5, 8, 13

다른 분들이 풀이한 내용 중 추천 수가 많은 풀이이다.

표현만 살짝 다르지 풀이 자체는 비슷하다.

나는 풀 때 정수를 1로 주면 [0,1]을 출력하게끔 코드를 조금 더 수정했는데 [0,1,1]로 출력해야하는지 모르겠다.

n=13

result=[0,1]

while 1:
    temp = result[-1]+result[-2]
    if temp < n: 
        result.append(temp)
    else:
        break

print(result)
[0, 1, 1, 2, 3, 5, 8]

또 다른 풀이인데 나랑 가장 풀이 방식이 비슷한 것 같다.

보니까 temp < n에서 등호가 빠진 듯 한데, 어쨌든 똑같이 while을 썼다.

나는 무조건 값을 추가한 후 n보다 크면 제거했는데 여기선 조건을 만족하면 값을 추가하여 좋아보인다.

Leave a comment