https://leetcode.com/problems/roman-to-integer/description/
/**
1. 문제 해석하기
I, V, X, L, C, D, M
4 -> IIII x -> IV
IV, IX
XL, XC
CD, CM
2. 문제 풀이 방향
단일 for문
현재 index와 다음 index를 두고 다음 index의 값이 현재 index의 값보다 큰지 판단
클 경우 다음 index의 값에서 현재 index의 값을 뺀 값을 더한 후 다다음 index로 넘어간다.
*/
class Solution {
public int romanToInt(String s) {
int len = s.length();
int result = 0;
Map<Character, Integer> map = new HashMap<>();
map.put('I', 1);
map.put('V', 5);
map.put('X', 10);
map.put('L', 50);
map.put('C', 100);
map.put('D', 500);
map.put('M', 1000);
for(int i = 0; i < len; i++) {
if (i + 1 < len && map.get(s.charAt(i)) < map.get(s.charAt(i + 1))) {
result += (map.get(s.charAt(i + 1)) - map.get(s.charAt(i)));
i += 1;
continue;
}
result += map.get(s.charAt(i));
}
return result;
}
}
위의 풀이보다 1ms 단축된 풀이이다.
비슷한 풀이이지만 뒤부터 문자열 요소를 비교했다는 점과 이전 데이터를 저장하고 있다가 비교한다는 점이 다른 점이다.
class Solution {
public int romanToInt(String s) {
int len = s.length();
int result = 0;
Map<Character, Integer> map = new HashMap<>();
map.put('I', 1);
map.put('V', 5);
map.put('X', 10);
map.put('L', 50);
map.put('C', 100);
map.put('D', 500);
map.put('M', 1000);
int prev = 0, number = 0;
for(int i = len - 1; i >= 0; i--) {
number = map.get(s.charAt(i));
if (number < prev) {
result -= number;
} else {
result += number;
}
prev = number;
}
return result;
}
}
'코딩테스트' 카테고리의 다른 글
14. Longest Common Prefix (0) | 2024.02.14 |
---|---|
844. Backspace String Compare (0) | 2024.02.12 |
136. Single Number (1) | 2024.02.07 |
876. Middle of the Linked List (0) | 2024.02.05 |
217. Contains Duplicate (0) | 2024.02.05 |