Problem From. https://leetcode.com/problems/integer-to-roman/
오늘 문제는 재귀를 이용해서 풀면 되는 문제였다.
조금 더 쉬운 버전으로 거스름돈을 구하는 문제가 있는데 그와 유사한 방식으로 풀었다.
주어진 숫자에서 로마자로 나올 수 있는 경우의 수를 세워서 재귀로 풀이하였다.
class Solution {
fun intToRoman(num: Int): String = recursive(num, "")
tailrec fun recursive(num : Int, result : String) : String =
when {
num == 0 -> result
num / 1000 > 0 -> recursive(num % 1000, result.plus("M".repeat(num / 1000)))
num / 100 == 9 -> recursive(num - 900, result.plus("CM"))
num / 500 > 0 -> recursive(num % 500, result.plus("D".repeat(num / 500)))
num / 100 == 4 -> recursive(num - 400, result.plus("CD"))
num / 100 > 0 -> recursive(num % 100, result.plus("C".repeat(num / 100)))
num / 10 == 9 -> recursive(num - 90, result.plus("XC"))
num / 50 > 0 -> recursive(num % 50, result.plus("L".repeat(num / 50)))
num / 10 == 4 -> recursive(num - 40, result.plus("XL"))
num / 10 > 0 -> recursive(num % 10, result.plus("X".repeat(num / 10)))
num == 9 -> result.plus("IX")
num / 5 > 0 -> recursive(num % 5, result.plus("V".repeat(num / 5)))
num == 4 -> result.plus("IV")
else -> result.plus("I".repeat(num))
}
}
tailrec 함수를 이용하여 재귀를 구현할 수 있었다.