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
반응형
'Kotlin > 코딩테스트' 카테고리의 다른 글
[프로그래머스] 쿼드압축 후 개수 세기 - kotlin (0) | 2023.04.22 |
---|---|
[프로그래머스] 소수 찾기 - kotlin (0) | 2023.04.21 |
[프로그래머스] 다리를 지나는 트럭 - kotlin (0) | 2023.04.18 |
[프로그래머스] 뒤에 있는 큰 수 찾기 - kotlin (0) | 2023.04.17 |
[프로그래머스] 2개 이하로 다른 비트 - kotlin (0) | 2023.04.17 |