본문 바로가기
파이썬/파이썬 알고리즘

파이썬 백준 13301번 수학 합

by Go! Jake 2021. 2. 20.

https://www.acmicpc.net/problem/13301

 

13301번: 타일 장식물

대구 달성공원에 놀러 온 지수는 최근에 새로 만든 타일 장식물을 보게 되었다. 타일 장식물은 정사각형 타일을 붙여 만든 형태였는데, 한 변이 1인 정사각형 타일부터 시작하여 마치 앵무조개

www.acmicpc.net

풀이 과정

def fibo(x):
    if x==0:
        return dictionary[x]
    elif x==1:
        return dictionary[x]
    
    if x in dictionary:
        return dictionary[x]
    else:
        dictionary[x]=fibo(x-1)+fibo(x-2)
        return dictionary[x]

n=int(input())
dictionary={0:4, 1:6}

print(fibo(n-1))

피보나치에 대한 문제풀이 레파토리 아래 링크를 참조한다.

yaneodoo2.tistory.com/15?category=978881

 

몇 개의 항을 나열하면서 계산을 해 보면, 피보나치 수열이 유지되는 것을 알 수 있다.

따라서 dictionary에 첫 번째 항과 두 번째 항의 값을 따로 값을 넣어준다.

 

    if x in dictionary:
        return dictionary[x]

구하려는 x항이 이미 dictionary에 있는 지 본다. x는 dictionary 내에서 "key" 값을 찾는다.

그리고 key 값이 탐색된다면, 이에 맞는 값을 리턴한다.

예를 들어 {0:1}이라는 dictionary가 있으면 0이라는 값을 찾는 것이다.


    else:
        dictionary[x]=fibo(x-1)+fibo(x-2)
        return dictionary[x]

구하려는 x항이 dictionary에 없다면 dictionary[x]=fibo(x-1)+fibo(x-2)로 새로 값을 넣어준다.

 

 

댓글