[백준-파이썬] 10870번 피보나치 수 5 : 변수를 동시에 계산하는 방법

Chanyoung Lee·2021년 6월 9일
0

백준

목록 보기
4/6

문제

10870번: 피보나치 수 5 문제 바로보기
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.
n=17일때 까지 피보나치 수를 써보면 다음과 같다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

그렇다면 n번째 피보나치 수를 어떻게 구할 수 있을까.

고민

소수를 다루는 문제에서 워낙 '시간초과'와 '런타임에러'를 겪다보니 어떻게 하면 가장 효율적인 코드를 짤 수 있을까 고민이 된다.
n번째 피보나치 수를 구하기만 하면 되니 거기까지만 계산하고 끝내자라는 생각이다.

먼저, 0번째와 1번째인 피보나치 수에 각각 변수를 주어주고
해당 변수를 활용하여 n번째까지 계산하기로 했다.

해결

from sys import stdin

n=int(stdin.readline())

a=0 #0번째 피보나치 수
b=1 #1번째 피보나치 수

if n>1: #1번째 피보나치 수까지는 구해져 있으니 2 이상의 피보나치를 구하는 식을 작성.
    f=0 #n번째 피보나치 수를 구하기 위한 변수
    for i in range(1,n):
        f=a+b #i번째 피보나치 수
        a=b
        b=f
    print(f)
elif n==1:
    print(b)
else:
    print(a)

다른이풀이

def p(n):
    x=0
    y=1
    for i in range(n):
        x,y=y,x+y;
    return x
a=int(input())
print(p(a))

다른 분의 풀이를 보니 변수를 같은 조건에서 동시에 계산하는 방법이 있다는 것을 깨달았다.

예를들어, a=1, b=2일 때

a=b #2
b=a+b #4

위는 결과 값이 4가 나오는데,

a, b = b, a+b #a=2, b=3

위 처럼 하게 되면 결과 값이 3이 나온다.

동시에 이 분은 함수 return값을 뒤가 아닌 앞에 있는 x값을 출력함으로서 나처럼 if문을 쓰지 않아도 되는 코드를 작성했다.

리뷰

  1. 변수를 같은 조건(환경)에서 동시에 계산하는 방법을 기억해두기.
  2. 코드를 효율적으로 쓰는 방법은 무엇일까? 또 그 방법에 대해 고민해보기.
profile
함께 일하는 가치를 아는 사람

0개의 댓글