import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.lang.Integer.min
fun main(args: Array<String>) {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.out))
val number = br.readLine().toInt()
val dp = IntArray(number + 1) { Int.MAX_VALUE }
dp[number] = 0
for (i in number downTo 1) {
if (i % 3 == 0) {
dp[i/3] = min(dp[i/3],dp[i]+1)
}
if (i % 2 == 0) {
dp[i/2] = min(dp[i/2],dp[i]+1)
}
dp[i-1] = min(dp[i-1],dp[i]+1)
}
bw.write(String.format("%d",dp[1]))
bw.flush()
br.close()
bw.close()
}
다이나믹 프로그래밍을 사용해서 number부터 1까지 반복문을 돌렸다
이 때
세가지 경우를 고려하여 계산하되 그 전 값이랑 비교해 min이 되는 값으로 유지되게 하였다.
그 후 dp[1]의 값을 구해주면 된다
요시푸스 문제 0 (0) | 2023.08.17 |
---|---|
카드2(백준) (0) | 2023.08.14 |
색종이 만들기(백준) (0) | 2023.08.02 |
바이러스(백준) (0) | 2023.07.28 |
계단 오르기(백준) (0) | 2023.07.27 |
댓글 영역