![[BOJ] 백준 11726 2xn 타일링 Python](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbxd0ar%2FbtsDfPFWgIV%2F9MFp1iuxnfQX2MCY0KgCb1%2Fimg.png)
[BOJ] 백준 11726 2xn 타일링 Python알고리즘 & 코테2024. 1. 9. 10:36
Table of Contents
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
문제풀이
n의 범위는 1 <= n <= 1,000이다
따라서 n==1000일 경우엔 수많은 경우의 수가 존재하기 때문에 DP가 이 문제에 적합하다고 생각했다.
DP문제가 항상 그렇듯 초기값을 정하고 나선 항상 그 초기값 케이스에 대한 경우 처리를 따로 해주어야한다. 예를 들어 n == 2일때와 같은 상황을 말한다.
경우의 수를 구하는 문제기 때문에 n이 작을때는 그림을 그려도 경우의 수가 많지 않을거라고 생각해 그림을 그렸더니 패턴을 찾을 수 있었다. 이는 아래의 그림과 같다.
Code
from sys import stdin
input = stdin.readline
div = 10007
def solve():
n = int(input())
dp = [0] * n
dp[0] = 1
if n >= 2:
dp[1] = dp[0] + 1
if n >= 3:
dp[2] = dp[1] + 1
for i in range(3, n):
dp[i] = dp[i - 1] + dp[i - 2]
print(dp[-1] % div)
solve()
'알고리즘 & 코테' 카테고리의 다른 글
[BOJ] 백준 2225 합분해 Python (0) | 2024.01.10 |
---|---|
[BOJ] 백준 2293 동전 1 Python (1) | 2024.01.10 |
[BOJ] 백준 2579 계단 오르기 Python (1) | 2024.01.09 |
[BOJ] 백준 17298 오큰수 Python (1) | 2024.01.08 |
[BOJ] 백준 3190 뱀 Python (1) | 2024.01.08 |
@Indigochi1d :: Indigochi1d's Commit Log
안녕하세요? 개발자입니다.