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
}
}
'코딩테스트' 카테고리의 다른 글
LeetCode - 31. Next Permutation - swift (0) | 2021.08.20 |
---|---|
LeetCode - 15. 3Sum - swift (0) | 2021.08.18 |
LeetCode - 22. Generate Parentheses - swift (0) | 2021.08.18 |
LeetCode - Count Good Nodes in Binary Tree - swift (0) | 2021.08.17 |
프로그래머스 - 위클리 챌린지 3주차 - 퍼즐 조각 채우기 - swift (0) | 2021.08.17 |