본문 바로가기
컴퓨터 공학/백준

[Python] 백준 1904번:01타일 / 문제 풀이, 설명

by 알로에파 2022. 10. 18.

[Python] 백준 1904번:01타일 / 문제 풀이, 설명


º 코드

def Dp(n):
    a = [1,1]
    if n>=2:
        for i in range(2, n+1):
            a.append((a[i-1]+a[i-2])%15746)
    return a[n]

print(Dp(int(input())))

 

º 풀이

1. 전체적인 코드 풀이

  • Bottom - Top, 상향식으로 a 리스트를 채워나가 값을 구함

2. 함수 설명

def Dp(n):
    a = [1,1]
    if n>=2:
        for i in range(2, n+1):
            a.append((a[i-1]+a[i-2])%15746)
    return a[n]
  • n과 배열 Index를 맞춰주기 위해서 배열을 [1,1]로 정의해서 for을 이용해 n까지 채워나갔다.

º 풀이 과정

  1. 2진 수열 타일이 있는데 0은 00의 형태로만 쓰인다. N이 주어질 때 가짓수를 15746으로 나눈 나머지를 출력!
  2. N이 1일 때 ( 1 ), 2일 때 (11, 00), 3 = (111, 100, 001 ), 4 = (1111, 1100, 0011, 0000, 1001 ) // f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5 
  3. 결국 N>=3 일 때 f(N) = f(N-1) + f(N-2)가 된다. N의 범위가 매우 크기 때문에 Down-top 방식인  Tabulation을 이용

º 도움이 된 사이트

 

동적 계획법 - 나무위키

동적 계획법의 개념과 구현에 대해 정확하게 짚고 넘어가기 위해 동적 계획법을 적용시킬 수 있는 예에 대해 알아보자. f(a,b) = f(a-1,b) + f(a,b-1) (a,b >= 1 )f(0,0) = 1, 임의의 자연수 n에 대해 f(n,0) = f(0,

namu.wiki

 

댓글