[백준] 동물원 (1309)(kotlin)
문제 설명
입력 및 출력
» 입력
첫째 줄에 우리의 크기 N(1≤N≤100,000)이 주어진다.
» 출력
첫째 줄에 사자를 배치하는 경우의 수를 9901로 나눈 나머지를 출력하여라.
예제 입출력(테스트케이스)
입력 | 출력 |
---|---|
4 | 41 |
문제 풀이1
import java.util.Arrays
fun main() = with(System.`in`.bufferedReader()) {
val N = readLine().toInt()
val dp = Array(N + 1) { IntArray(3) }
Arrays.fill(dp[1], 1)
for (i in 2..N) {
dp[i][0] = dp[i - 1][0] + dp[i - 1][1] + dp[i - 1][2]
dp[i][1] = dp[i - 1][0] + dp[i - 1][2]
dp[i][2] = dp[i - 1][0] + dp[i - 1][1]
dp[i][0] %= 9901
dp[i][1] %= 9901
dp[i][2] %= 9901
}
println(dp[N].reduce { acc, i -> acc + i } % 9901)
}
문제 풀이2
fun main() = with(System.`in`.bufferedReader()) {
val N = readLine().toInt()
val dp = IntArray(N + 1)
dp[0] = 1
dp[1] = 3
for (i in 2..N) {
dp[i] = (dp[i - 1] * 2 + dp[i - 2]) % 9901
}
println(dp[N])
}
시뮬레이션(점화식)