본문 바로가기
알고리즘/baekjoon

[알고리즘/baekjoon] 11726_2×N 타일링(python)

by 천뿌니 2021. 11. 22.
728x90

문제

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

 

11726번: 2×n 타일링

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

www.acmicpc.net

# 전형적인 다이나믹 프로그래밍 문제이다.
# 문제를 처음 접했을 때 아무런 공식이나 풀이방법이 떠오르지 않는다면 하나하나 예시를 들면서 공식을 찾는것이 좋은 방법이다. 특히나 dp문제에서는 더 더욱 !
# 여기서는 dp[i] = dp[i-1] + dp[i-2] 라는 점화식을 발견할 수 있다.
import sys

N = int(sys.stdin.readline())
dp = [0 for _ in range(N+1)]

if N <3:
  print(N)
else: # 본격적으로 n이 3부터 점화식이 적용
  dp[1] = 1
  dp[2] = 2
  for i in range(3,N+1):
    dp[i] = dp[i-1] + dp[i-2]
  print(dp[N]%10007)
# 예시
# n = 1 (|) -> 1
# n = 2 (||, =) -> 2
# n = 3 (|||, |=, =|) -> 3
# n = 4 (||||, =||, |=|, ||=, ==) -> 5
# n = 5 (|||||, =|||, |=||, ||=|, |||=, |==, =|=, ==|) -> 8
# n의 경우의 수는 n-1의 경우의 수와 n-2의 경우의 수의 합과 같다. (단, n이 3이상일 때)

 

* 코드 참조는 아래 github주소를 들어와주세요

https://github.com/JunSeokCheon

 

JunSeokCheon - Overview

JunSeokCheon has 6 repositories available. Follow their code on GitHub.

github.com

댓글