https://www.acmicpc.net/problem/11726
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
처음 제출한 코드
import Foundation
let n = Int(readLine()!)!
var dp = Array(repeating: 0, count: n+1)
dp[1] = 1
dp[2] = 2
if n >= 3 {
for i in 3..<n+1 {
dp[i] = (dp[i-1] + dp[i-2]) % 10007
}
}
print(dp[n])
>> 런타임 에러
왜 런타임 에러가 나는지 30분 동안 꽁꽁 싸맸는데.....
n = 1일 때, dp 배열을 길이를 n+1까지 만들어놔서
dp[2] = 2 이 곳에서 에러가 발생했다.
※ 해결 방법 1) 배열 길이를 input의 최대값보다 조금 크게 잡는다. (ex. 1001)
import Foundation
let n = Int(readLine()!)!
var dp = Array(repeating: 0, count: 1001)
dp[1] = 1
dp[2] = 2
if n >= 3 {
for i in 3..<n+1 {
dp[i] = (dp[i-1] + dp[i-2]) % 10007
}
}
print(dp[n])
2) n이 3이하일때 예외처리 해준다.
import Foundation
let n = Int(readLine()!)!
var dp = Array(repeating: 0, count: n+1)
if n == 1 {
print(1)
}
else if n == 2 {
print(2)
}
else {
dp[1] = 1
dp[2] = 2
for i in 3...n {
dp[i] = (dp[i-1] + dp[i-2]) % 10007
}
print(dp[n])
}
'Algorithm > BOJ' 카테고리의 다른 글
[코테] 어린 왕자 (0) | 2024.03.08 |
---|---|
[코테] 동전 (0) | 2024.03.08 |
[코테] 평범한 배낭 (1) | 2024.03.08 |
[코테] 포도주 시식 (0) | 2024.03.06 |
[코테] 1로 만들기 (0) | 2024.03.05 |