코딩테스트
LeetCode - 12. Integer to Roman - swift
vapor3965
2021. 8. 18. 16:04
https://leetcode.com/problems/integer-to-roman/
구현 문제다.
말 그대로 숫자를 로마 표기법으로 변환하는 방법이다.
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
}
}