Daily LeetCode Challenge - 12. Integer to Roman

Min Young Kim·2022년 10월 20일
0

algorithm

목록 보기
12/198

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 함수를 이용하여 재귀를 구현할 수 있었다.

profile
길을 찾는 개발자

0개의 댓글