로마 숫자를 정수로 변환 해야한다. 여기서 각 자리 문자의 변환값이 내림차순이라면 +, 오름차순이라면 -
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1,000
solution('XXI'); // should return 21
solution('IV'); // should return 4
각 자리의 문자를 숫자로 변환하는 것을 고민했는데 역시나 이럴 때는 객체만한 것이 없는 것 같다.
일단 split한 인자의 value를 구해서 더했는데, 이 문제의 핵심은 오름차순인 경우에는 어떻게 처리할 것인가다. 단순히 이전 인덱스의 값이 더 작다면 빼고, 아니면 더하는 로직을 구현했다.
여기서 사실 splitted는 필요 없다. string 또한 index를 가지기 때문에 for문으로 한 요소씩 loop할 수 있다. 항상 for문을 쓰면 split을 습관적으로 쓴다는 것이 문제.. 명심하자.
function solution(roman) {
const value = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };
const splitted = roman.split("");
let result = 0;
for (let i = 0; i < splitted.length; i++) {
if (value[splitted[i]] < value[splitted[i + 1]]) {
result -= value[splitted[i]];
} else result += value[splitted[i]];
}
return result;
}
function solution(roman) {
const value = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };
let result = 0;
for (let i = 0; i < roman.length; i++) {
value[roman[i]] < value[roman[i + 1]]
? (result -= value[roman[i]])
: (result += value[roman[i]]);
}
return result;
}