[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