Algorithm/프로그래머스
[프로그래머스] Lv 3. N으로 표현(Kotlin)
RIEN😚
2022. 6. 5. 14:05
728x90
반응형
코딩테스트 연습 - N으로 표현
programmers.co.kr
문제
숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현할 수 있는 방법 중 N 사용횟수의 최솟값을 return하도록 solution 함수를 작성하세요.
풀이
이 문제에서는 제한 사항을 볼 필요가 있습니다.
최솟값이 8보다 크면 -1을 return 한다는 점입니다. 즉, 숫자 N을 최대 8번만 사용 가능하다는 것!
이 제한사항 덕분에 문제가 훨씬 간편해졌습니다.
저희는 그저 사칙 연산한 결과를 재귀함수로 전달하면서 number를 만들 수 있는지 검사만 해주면 됩니다.
var n = 0
for (i in 1..8) {
// N숫자 늘리기, 5, 55, 555, 5555 같이
n = n * 10 + N
solve(result + n, count + i, N, number) // +
solve(result - n, count + i, N, number) // -
solve(result * n, count + i, N, number) // *
solve(result / n, count + i, N, number) // /
}
재귀의 탈출 시점은 두 가지가 있습니다.
1. 숫자를 8보다 많이 사용한 경우
2. 사칙연산 결과가 number와 같은 경우
// result: 사칙연산 격롸
// count: 사용한 숫자 개수
fun solve(result: Int, count: Int, N: Int, number: Int) {
if (count > 8) return
if (result == number) {
return
}
}
코드
import kotlin.math.*
class Solution {
var answer = 9
fun solution(N: Int, number: Int): Int {
solve(0, 0, N, number)
return if (answer > 8) -1 else answer
}
fun solve(result: Int, count: Int, N: Int, number: Int) {
if (count > 8) return
if (result == number) {
answer = min(answer, count)
return
}
var n = 0
for (i in 1..8) {
// N숫자 늘리기, 5, 55, 555, 5555 같이
n = n * 10 + N
solve(result + n, count + i, N, number) // +
solve(result - n, count + i, N, number) // -
solve(result * n, count + i, N, number) // *
solve(result / n, count + i, N, number) // /
}
}
}
반응형