포도가게의 개발일지

python 백준 1904 01타일 본문

백준

python 백준 1904 01타일

grape.store 2021. 8. 26. 20:49
반응형

백준 1904번 01타일 문제

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

 

1904번: 01타일

지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이

www.acmicpc.net

 

문제 : 00와 1을 사용하여 만들 수 있는 경우의 수의 15746으로 나눈 나머지

접근법

- 타일의 개수의 따른 조합법을 찾았다

타일이 하나인 경우 조합이 1가지

타일이 둘인 경우 조합이 2가지

타일이 셋인 경우 조합이 3가지

타일이 넷인 경우 조합이 5가지 가 나왔으며

피보나치 수열처럼 f(n) = f(n-1) + f(n-2)로 움직이는 것을 확인 후 dp를 이용하여 접근

문제점 : 처음에는 top-down 방식으로 접근하였지만 백준에서 돌릴 시 재귀가 너무 깊어져 

재귀 깊이 에러가 나와 bottom-up방식으로 바꾸어주어 해결 하였다.

import sys
sys.stdin = open('inputs.text')

n = int(sys.stdin.readline())

## 딕셔너리를 활용 ##
memo = {0:0, 1:1, 2:2}

def fx(n):
    if n in memo:
        return memo[n]

    memo[n] = (fx(n-2) + fx(n-1))%15746
    return memo[n]

## top-down방식으로는 재귀에러가 나와
## bottom-up방식으로 접근하였다
for i in range(3,n+1):
    fx(i)


print(fx(n))

 

'백준' 카테고리의 다른 글

python 백준 1946 신입사원  (0) 2021.08.30
python 백준 1931 회의실 배정  (0) 2021.08.30
python 백준 2638 치즈  (0) 2021.08.25
python 백준 16236 아기상어  (0) 2021.08.24
python 백준 2583 영역 구하기  (0) 2021.08.24
Comments