문제
로마 숫자는 I, V, X, L, C, D, M으로 나타낸다. 이를 정수로 바꾼 값은?
보통의 경우에는 왼쪽으로 갈 수록 큰 숫자에서 작은 숫자로 향하는데,
반대의 경우 다른 숫자를 나타낸다. 그 예로 숫자 4는 IIII가 아니라 IV로 나타낸다.
생각할 것
숫자와 우선순위를 어떻게 간단히 나타낼까? map을 사용하자!
그 중에서도 키값의 순서가 필요 없으므로 unordered_map을 사용하기
코드
class Solution {
public:
int romanToInt(string s) {
unordered_map<char, int> m = {
{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}
};
int res = 0;
for(int i=0; i<s.size()-1; i++){
if(m[s[i]] < m[s[i+1]]){ // 다음에 오는게 더 크면 다음에 올 값에서 해당 문자를 뺀 값이 된다
res -= m[s[i]];
}
else {
res += m[s[i]];
}
}
res += m[s[s.size()-1]];
return res;
}
};
반응형
'Problem solving > LeetCode' 카테고리의 다른 글
[LeetCode] 15. 3Sum (C++) (0) | 2023.06.29 |
---|---|
[LeetCode] 14. Longest Common Prefix (C++) (0) | 2023.06.29 |
[LeetCode] 11. Container With Most Water (C++) (0) | 2023.06.27 |
[LeetCode] 8. String to Integer (atoi) (C++) (0) | 2023.06.23 |