본문 바로가기
코딩테스트

LeetCode - 12. Integer to Roman - swift

by vapor3965 2021. 8. 18.

목차

    https://leetcode.com/problems/integer-to-roman/

     

    Integer to Roman - LeetCode

    Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

    leetcode.com

     

    구현 문제다. 

    말 그대로 숫자를 로마 표기법으로 변환하는 방법이다.

    1,5,10,50,100,500,1000 이렇게 각 값마다 표기하는 로마 표기법이 있고, 

    8은 VIII 이렇게, 큰숫자부터 앞에서 쓴다. 

     

    하지만.. 

    4는 IIII가 아닌, IV 이다 ! ( ??? ) 

    9는 VIIII가 아닌, IX 다 ! ( ??? ) 

     

    마찬가지로 40, 90 , 400, 900.. 

    이렇게 4나 9는 위와 같은 규칙을 따르면 된다는 점만 인지하면 된다. 

     

    숫자는 최대 3999까지만 들어오고,

    숫자 앞자리부터 차근차근 if문을 이용하여, 4인지, 9 인지, 5보다 큰지, 그 외 경우로 분기 처리하여 값을 빼내면서 완성해나가면 된다. 

     

     

    로마 숫자가 이렇게 쓰이는지 처음 알았다. ( 로마 숫자로 표기하는 방법을 알고 난 뒤, 과연 로마인들도 해석할 수 있을까? 라는 생각이 들었다. ㅎ ) 

     

     

    class Solution {
        var dict = [1: "I", 5: "V", 10: "X", 50: "L", 100: "C", 500: "D", 1000: "M"]
        
        func intToRoman(_ num: Int) -> String {
            var start = 1000
            var num = num
            var ans = ""
            while num > 0 {
                let x = num / start
                if x == 0 {
                    start/=10
                    continue
                }
                if x == 4 {
                    ans += dict[start]!+dict[start*5]!
                    num -= start*x
                    start/=10
                } else if x == 9 {
                    ans += dict[start]!+dict[start*10]!
                    num -= start*x
                    start/=10
                } else if x >= 5 {
                    ans += dict[start*5]!
                    num -= start*5
                } else {
                    ans += dict[start]!
                    num -= start
                }
            }
            return ans
        }
    }

    댓글