Kotlin/코딩테스트

[프로그래머스] 숫자 변환하기 - kotlin

깨노비 2023. 4. 21. 02:39
728x90
반응형

자연수 x를 y로 변환하려고 합니다. 사용할 수 있는 연산은 다음과 같습니다.

x에 n을 더합니다
x에 2를 곱합니다.
x에 3을 곱합니다.
자연수 x, y, n이 매개변수로 주어질 때, x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수를 완성해주세요. 이때 x를 y로 만들 수 없다면 -1을 return 해주세요.

class Solution {
    var cnt: Int = 1000000
    var map = mutableMapOf<Int, Int>()
    
    fun solution(x: Int, y: Int, n: Int): Int {
        search(x, y, n, 0)
        return if (cnt == 1000000) -1 else cnt
    }

    tailrec fun search(x: Int, y: Int, n: Int, depth: Int) {
        val flag = when {
            x == y -> {
                cnt = minOf(cnt, depth)
                false
            }

            (depth >= cnt) || (x > y) || (map[y] ?: depth < depth) -> false
            else -> true
        }

        map[y] = minOf(map[y] ?: depth, depth)
        if (flag) {
            if (y % 3 == 0) search(x, y / 3, n, depth + 1)
            if (y % 2 == 0) search(x, y / 2, n, depth + 1)
            search(x, y - n, n, depth + 1)
            
        }
    }
}
728x90
반응형