제로부터 시작하는 코딩 생활

[점프투파이썬] 피보나치 함수 p.323 본문

점프투 파이썬

[점프투파이썬] 피보나치 함수 p.323

VacTEn 2022. 3. 22. 08:51

Q.5 피보나치 함수

 

 첫 번째 항의 값이 0이고 두번째 항의 값이 1일때, 이후에 이어지는 항은 이전의 두 항을 더한 값으로 이루어지는 수열을 피보나치 수열이라고 한다.

더보기

0, 1, 1, 2, 3, 5, 8, 13 ...

 입력을 정수 n으로 받았을 때, n 이하까지의 피보나치 수열을 출력하는 함수를 작성해보자.

 

1차 시도

n = int(input("정수를 입력하세요: "))
sequence = [0, 1]
while sequence[-1] < n:
    sequence.append(sequence[-1]+sequence[-2])
print(sequence)

작동여부: Ok

올바른결과값출력: No

 

수열이 원하는 만큼보다 한번 더 진행되는 결과가 나왔다.

70을 입력했을때 결과값 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

 

2차 시도

n = int(input("정수를 입력하세요: "))
sequence = [0, 1]
while sequence[-1] < n:
    sequence.append(sequence[-1]+sequence[-2])
while sequence[-1] > n:
    sequence.pop()
print(sequence)

작동여부: Ok

올바른결과값출력: Ok

 

3차 보완

n = int(input("정수를 입력하세요: "))
sequence = [0, 1]
while sequence[-1] < n:
    if sequence[-1]+sequence[-2] <= n:
        sequence.append(sequence[-1]+sequence[-2])
    else:
        break
print(sequence)

조건에 따라 append해주어 pop을 안해도 되게 보완했다.

해석

n = int(input("정수를 입력하세요: "))

n 이라는 변수를 입력받아 자료형을 정수형으로 바꾼다. 

입력받은 수는 스트링으로 인식하기 때문. 이는 다음의 간단한 코드로 확인해 볼 수 있다.

n = input()
print(type(n))

 

input으로 숫자를 입력하여도 자료형은 str으로 나온다.

정수형으로 바꾸는 이유는 후에 조건문에서 사용하기 위함이다. 밑에서 확인

sequence = [0, 1]

조건이 "첫 번째 항의 값이 0이고 두번째 항의 값이 1일때" 이므로 0과 1을 포함하는 리스트를 미리 만들어 준다.

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

sequence 리스트의 마지막 요소가 입력받은 n보다 작은 동안에,

sequence 리스트의 마지막 요소와 마지막에서 2번째 요소를 더한 값이 이하이면 이값을 새롭게 리스트에 추가한다.

계산값이 n보다 크다면 append하지 않고 while문을 종료하고 지금껏 만든 리스트를 출력한다.

n을 여기서 논리연산에 사용하기 위하여 정수형으로 바꾸어 준것이다.

 

 

 

예시로 input으로 70을 입력하면

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 이 출력된다.