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 |