상세 컨텐츠

본문 제목

1로 만들기

코딩테스트

by dofury 2023. 10. 17. 09:37

본문

728x90

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]의 값을 구해주면 된다

728x90

'코딩테스트' 카테고리의 다른 글

요시푸스 문제 0  (0) 2023.08.17
카드2(백준)  (0) 2023.08.14
색종이 만들기(백준)  (0) 2023.08.02
바이러스(백준)  (0) 2023.07.28
계단 오르기(백준)  (0) 2023.07.27

관련글 더보기

댓글 영역