[백준/코틀린] 1463번: 1로 만들기
실버 3
링크
풀이
dp[i]: i를 1로 만들기 위한 최소 연산 횟수
n에서 1을 만들기 위한 최소 연산 횟수를 구하기 위해,
1에서 n을 만드는 반대 연산의 최소 횟수를 구하는 방식으로 접근합니다.
즉, dp[i]는 dp[i - 1], dp[i / 2], dp[i / 3] 중 최솟값에 1을 더한 값이 됩니다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fun main() {
val n = readln().toInt()
val dp = MutableList(n + 1) { Int.MAX_VALUE }
dp[1] = 0
(1..n).forEach {
if (it + 1 <= n) dp[it + 1] = minOf(dp[it + 1], dp[it] + 1)
if (it * 2 <= n) dp[it * 2] = minOf(dp[it * 2], dp[it] + 1)
if (it * 3 <= n) dp[it * 3] = minOf(dp[it * 3], dp[it] + 1)
}
println(dp[n])
}
This post is licensed under CC BY 4.0 by the author.