백준 13301번 바로가기

나의 풀이

n = int(input())

f = [1]*(n+1)
for i in range(2, n+1):
  f[i] = f[i-1] + f[i-2]

if n < 2:
  print(4)
else:
  print(2*(2*f[n-1]+f[n-2]))

고수의 풀이

a=b=1;exec('a,b=b,a+b;'*int(input()));print(b*2)

출처

CODE REVIEW

  1. 피보나치 수열을 구하고, 길이에 대한 일반항만 구하면 쉽게 해결 가능한 문제였다.
  2. 고수의 풀이를 보면 길이를 간단하게 피보나치 n항의 2배로 구했는데, 논리를 따져보면…
    • (둘레) = $2(2a_{n-1}+a_{n-2})$ = $2(a_{n}+a_{n-1})$ = $2a_{n+1}$
    • 따라서 피보나치 수열의 n+1항의 2배가 둘레와 같다.