알고리즘/백준

0212. [BOJ#11727] 2×n 타일링 2

Jinoo.keem 2024. 2. 12. 02:06
728x90
1 초 256 MB 72547 43104 34700 58.847%

문제

2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

아래 그림은 2×17 직사각형을 채운 한가지 예이다.

입력

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)

 

출력

첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.


함수를 쓰면 시간초과가 난다.

제출 코드

import sys
input = sys.stdin.readline

n = int(input())
lst = [0] * 1001
lst[1] = 1
lst[2] = 3

for i in range(3, 1001):
    lst[i] = lst[i-1] + (lst[i-2] * 2)

print(lst[n]%10007)

for 문을 쓴 경우

제출 코드2

import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
n = int(input())

def recur(n):
    if n == 1:
        return 1
    elif n == 2:
        return 3
    
    return recur(n-1) + (recur(n-2) * 2)

result = recur(n)
print(result%10007)

함수를 쓴 경우 (시간초과가 난다)

 

4번까지 직접 해보고 점화식을 구해서 풀었다.. n=4 일 때의 경우의 수를 잘못구해서 너무오래걸렸다..

'알고리즘 > 백준' 카테고리의 다른 글

0213. [BOJ#15649] N과 M(1)  (0) 2024.02.15
0212. [BOJ#2606] 바이러스  (0) 2024.02.12
0211. [BOJ#24482] 알고리즘 수업 - 깊이 우선 탐색 4  (1) 2024.02.11
0209. [BOJ#2798] 블랙잭  (1) 2024.02.09
0207. [BOJ#10798] 세로읽기  (0) 2024.02.07