...
본문 바로가기

코딩테스트

LeetCode - 12. Integer to Roman - swift

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
    }
}