Python/코딩 문제

[백준] 2×n 타일링

green_ne 2021. 11. 22. 23:51

# 설명

1*2, 2*1의 타일 종류를 가진 타일들로 2*n크기의 직사각형 보드를 채우는 경우의 수를 구하시오.

여기서 경우의 수를 10007로 나눈 나머지를 출력하시오.

 

# 입출력

입력 (n) 출력
2 2
9 55

 

# 문제 풀이

def tailing(n):
    memo = {0:0, 1:1, 2:2} # 타일 배치 경우의 수
    type_t = [1,2] # 타일 타입
    if n < 3:
        return memo[n]

    for N in range(3, n+1):
        n_case = 0
        for x in type_t: 
            if N >= x: # 타일을 배치할 수 있다면
                n_case += memo[N-x]
        memo[N] = n_case
    return memo[N]

n = int(input()) # 보드 너비 n
res = tailing(n)
print(res%10007)

 

# 핵심 포인트

- 동적 프로그래밍 DP

반응형