본문 바로가기
Coding Test

백준 11727 - 2×n 타일링 2 (Python)

by Hyeonlog 2022. 12. 19.
728x90

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

 

11727번: 2×n 타일링 2

2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다.

www.acmicpc.net

전형적인 dp 문제

dp문제의 핵심은 점화식을 빨리찾는 수 밖에 없는거 같다.

해당 문제는 직접 그리는 방식으로 점화식을 쉽게 찾을 수 있는 것 같다.

점화식 연습을 위해서는 가능한 다양한 문제를 풀어봐야할 것 같다.

 

1. 입력값이 1000이므로 1001개의 배열을 생성 -> 0번 인덱스는 계산하지 않기 때문

2. 입력값 1, 2는 규칙성을 찾을 수 없으므로 값을 바로 대입

3. 점화식 찾기

n = 2 -> 3 

n = 3 -> cache[n-1] + 2 = 3 + 5

n = 4  -> cache[n-1] + 2*3 = 3 + 5 + 6 = 11

n -> cache[n-1] + cache[n-2] * 2

 

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

def dp(data):
    cache = [0 for _ in range(1001)]

    cache[1] = 1
    cache[2] = 3

    for index in range(3, data+1):

        cache[index] = (cache[index-1] + (cache[index-2] * 2)) % 10007

    return cache[data]


print(dp(n))

 

728x90
반응형

'Coding Test' 카테고리의 다른 글

백준 1920 - 수찾기( Python )  (0) 2023.01.04
백준 1463 - 1로 만들기( Python )  (0) 2022.12.24
백준 17478 - 재귀함수가 뭔가요?  (0) 2022.12.17
백준 1439 - 뒤집기 ( Python )  (0) 2022.12.09
백준 2217 - 로프 ( Python )  (0) 2022.12.01