1. 문제

로마자를 숫자로 변환하여 반환하는 함수를 구현하는 문제이다.
2. 풀이
이 문제의 핵심은 로마자의 결합여부 확인이다.
문제의 TestCase1 처럼 단순한 문자는 그냥 숫자를 더하면 된다.
"III"
III = 3.
하지만 로마자는 IV = 4 와 같이 결합이 가능하다.
"MCMXCIV"
M = 1000, CM = 900, XC = 90 and IV = 4.
결합되어 있는 문자 케이스를 잘 보면, 앞에 있는 문자의 값보다 뒤에 있는 문자의 값이 더 크다.
CM의 경우 'C' = 100, 'M' = 1000 이고 CM = 900이다.
즉, CM 은 M-C 이다. 이 원리를 이용하면 쉽게 풀 수 있다.
class Solution {
public int romanToInt(String s) {
HashMap<Character, Integer> hm = new HashMap<>();
hm.put('I', 1);
hm.put('V', 5);
hm.put('X', 10);
hm.put('L', 50);
hm.put('C', 100);
hm.put('D', 500);
hm.put('M', 1000);
int answer = 0;
for(int i=0; i<s.length()-1; i++){
if(hm.get(s.charAt(i)) < hm.get(s.charAt(i+1))){
answer -= hm.get(s.charAt(i));
}else{
answer += hm.get(s.charAt(i));
}
}
answer += hm.get(s.charAt(s.length()-1));
return answer;
}
}'dev > algorithm' 카테고리의 다른 글
| [LeetCode] 4. Median of Two Sorted Arrays (0) | 2025.02.12 |
|---|---|
| [LeetCode] 3. Longest Substring Without Repeating Characters (0) | 2025.02.09 |
| [LeetCode] 1. Two Sum (0) | 2025.02.09 |
| [LeetCode] 2364. Count Number of Bad Pairs (0) | 2025.02.09 |
| [CodeSignal] ZigZag - Java (0) | 2025.02.08 |