해당 포스팅은 릿코드 13번 Roman to Integer 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였으며 구현 문제이다.
로마 숫자를 정수로 표현하면 되는 문제이다.
로마 숫자의 각 값은 아래와 같다.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
로마 숫자는 일반적으로 왼쪽에서 오른쪽으로 큰 것에서 작은 것 순으로 표기한다. 하지만 아래 6가지의 경우 오른쪽에서 왼쪽으로 작은 것에서 큰 것으로 표기되며 빼기가 적용된다. (IV, IX, XL, XC, CD, CM)
- I can be placed before V (5) and X (10) to make 4 and 9.
- X can be placed before L (50) and C (100) to make 40 and 90.
- C can be placed before D (500) and M (1000) to make 400 and 900.
로마 문자열을 loop 돌리면서 정수로 더해주면 되는 문제이다.
문제에서 오른쪽에서 왼쪽으로 작은 것에서 큰 것으로 표기되며 빼기가 적용되는 문자열이 있다고 명시되어 있다.
따라서 loop를 돌리면서 현재 문자(prev)와 그 다음 문자(next)의 값을 비교한 후 prev보다 next 값이 클 경우 (next - prev)를 더해준 후 i++를 해주어 next 다음 문자로 넘어가자. 그렇지 않는 경우 prev값을 더해준다.
/**
* @param {string} s
* @return {number}
*/
const Roman = {
"I": 1,
"V": 5,
"X": 10,
"L": 50,
"C": 100,
"D": 500,
"M": 1000
}
var romanToInt = function(s) {
let result = 0;
for (let i = 0; i < s.length; i++) {
prev = Roman[s[i]];
next = Roman[s[i+1]];
if (prev < next) {
result += (next - prev);
i++;
} else {
result += prev;
}
}
return result;
};