문제 링크 : https://leetcode.com/problems/roman-to-integer/
난이도 : Easy
문제 풀이 :
Symbol에 대하여 정해진 값이 있다.
그리고 이 Symbol들을 조합하여 숫자를 표현한다.
이 때, 어떤 Symbol 두 개의 조합은 특정한 숫자를 나타낸다는 조건이 있다.
IV(4), IX(9), XL(40), XC(90), CD(400), CM(900) 에 해당한다.
어떤 Symbol에 해당하는 값을 매핑시켜야 하고 조합이 몇 개 되지 않으므로 HashMap 자료구조를 사용하여 이 조합들의 값을 매핑시킨다.
그리고 주어진 문자열을 순회하면서 조합에 해당하는 값을 더해준다.
소스 코드 :
class RomanToInteger {
companion object {
val ROMAN_MAP = hashMapOf(
"I" to 1,
"V" to 5,
"X" to 10,
"L" to 50,
"C" to 100,
"D" to 500,
"M" to 1000,
"IV" to 4,
"IX" to 9,
"XL" to 40,
"XC" to 90,
"CD" to 400,
"CM" to 900
)
}
fun romanToInt(s: String): Int {
var answer = 0
var index = 0
while(index < s.length) {
val cur: String = s[index].toString()
val next: String = s.getOrNull(index+1).toString()
if(ROMAN_MAP.containsKey("$cur$next")) {
answer += ROMAN_MAP.getOrDefault("$cur$next", 0)
index += 2
} else {
answer += ROMAN_MAP.getOrDefault(cur, 0)
index += 1
}
}
return answer
}
}
후기 :
처음 for문을 사용하다 인덱스 처리가 까다로워서 잠시 고민을 했었다.
문제를 어떻게 푸느냐에 따라 for과 while중 어느 것이 효율적인지 잘 판단할 수 있어야 겠다고 생각했다.
반응형
'Algorithm > Leetcode' 카테고리의 다른 글
LeetCode - Merge Two Sorted Lists (0) | 2020.07.30 |
---|---|
LeetCode - Valid Parentheses (0) | 2020.06.27 |
LeetCode - Longest Common Prefix (0) | 2020.06.27 |
LeetCode - Reverse Integer (0) | 2020.06.27 |
LeetCode - Two Sum (0) | 2020.06.27 |