https://www.acmicpc.net/problem/1904
난이도 : 실버 3
태그 : 다이나믹 프로그래밍
설명
다이나믹 프로그래밍에서 웰노운 문제들인 타일 시리즈.
이번엔 1과 00이라는, 조금 특이한 경우네요.
음... 어떻게 풀지 고민하다가, 결국 그냥 하나씩 써보면서 규칙성을 찾아보기로 했습니다.
n = 2
11
00
2개
n = 3
100
001
111
3개
n = 4
0000
0011
1100
1001
1111
5개
n = 5
00001
00100
10000
00111
11100
10011
11001
11111
8개
어라..? 피보나치 수열?
a(i) = a(i-1) + a(i-2)라는, 피보나치 수열과 동일한 점화식을 갖고 있었습니다.
점화식을 도출하는 과정이 어려울 뿐이지,
소스코드는 그냥 피보나치 수열을 구하면 되기 때문에 매우 간단할 것 같네요!
소스코드
fun main() {
val n = readln().toInt()
var n1 = 1
var n2 = 2
for (i in 0 until n - 2) {
val temp = n1
n1 = n2
n2 = (temp + n2) % 15746
}
println(if (n == 1) 1 else n2)
}
후기
실버 3이라는 난이도는 점화식을 도출하는 과정이 어려워 붙은 것이지,
소스코드 자체는 그냥 피보나치 수열을 구하는 것이였기 때문에 생각보다 매우 간단했습니다.
'코딩테스트 > Kotlin' 카테고리의 다른 글
[백준 16985번] [Kotlin] Maaaaaaaaaze (0) | 2023.07.30 |
---|---|
[백준 5648번] [Kotlin] 역원소 정렬 (0) | 2023.07.19 |
[백준 11967번] [Kotlin] 불켜기 (0) | 2023.07.15 |
[백준 15904번] [Kotlin] UCPC는 무엇의 약자일까? (0) | 2023.07.15 |
[백준 4949번] [Kotlin] 균형잡힌 세상 (0) | 2023.07.10 |