문제

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

아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

입력

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

출력

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

내가 푼 풀이

- n이 5일때까지 경우의 수를 구해봤는데 결국 피보나치 수열을 구하는 식이 나온다.

- f(n) = f(n-1) + f(n-2) 

- n이 일정숫자를 넘으면 담을수없이 커진다. 그래서 계산할때마다 10007로 나눈 나머지를 넣는다.

- f(n) % 10007 = ( f(n-1) + f(n-2) ) % 10007

 

import Foundation

var num = Int(String(readLine()!))!
var dp = Array(repeating: 0, count: 1001)
dp[1] = 1
dp[2] = 2
if num < 3 {
    print(dp[num])
} else {
    for i in 3...num {
        dp[i] = (dp[i-1] + dp[i-2]) % 10007
    }
    print(dp[num])
}

'코딩테스트 > 백준' 카테고리의 다른 글

BOJ-2579 계단 오르기 Swift  (0) 2023.04.18
BOJ-1149 RGB거리 Swift  (0) 2023.04.18
BOJ-1003 피보나치 함수 Swift  (1) 2023.04.17
BOJ-9095 1,2,3 더하기 Swift  (0) 2023.04.17
BOJ-1463 1로 만들기 Swift  (0) 2023.04.17

+ Recent posts