[BOJ] 11726. 2xn 타일링

Jimeaning·2023년 3월 24일
0

코딩테스트

목록 보기
21/143

Python3,DP

문제

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

입출력

키워드

  • DP

풀이

문제 조건

  • 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램
  • 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
    => 출력할 때 나누지 말고 연산 후에 변수에 넣어서 출력하기

변수 및 함수 설명

  • n: 2xn 크기의 직사각형 (1 ≤ n ≤ 1,000)
  • dp: 직사각형을 타일로 채울 수 있는 방법의 수 리스트

풀이

2 x (n-1) 과 2 x (n -2) 값을 더해주면 된다

n = 1일 때 2x1을 채울 수 있는 방법은 1이다.
n = 2일 때 2x2를 채울 수 있는 방법은 2이다. (1x2 2개 || 2x1 2개)
n = 3일 때 2x3을 채울 수 있는 방법은 3이다. (2x1 3개 || 2x1 1개 + 1x2 2개 || 2x1 2개 + 1x2 1개)
n = 4일 때 2x4을 채울 수 있는 방법은 5이다. (2x1 3개 || 2x1 1개 + 1x2 2개 || 2x1 2개 + 1x2 1개)

즉 2x(n-1) 직사각형을 채우는 경우와 2x(n-2) 직사각형을 채우는 방법을 더하면 된다.

최종 코드

n = int(input())
dp = [0 for i in range(1001)]
dp[1] = 1
dp[2] = 2

for i in range(3, 1001):
    dp[i] = (dp[i-1] + dp[i-2]) % 10007
        
print(dp[n])

피드백

가장 확실한 dp[1], dp[2] 값을 세팅해주고 3부터 1000까지 반복한다.
모를 때는 직접 규칙을 찾아 보고 풀이를 최대한 나중에 보자

profile
I mean

0개의 댓글