Source
https://leetcode.com/problems/roman-to-integer/description/
Roman to Integer - LeetCode
Can you solve this real interview question? Roman to Integer - Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example, 2 is written as II in Roman numeral, just tw
leetcode.com
Code
/**
* @param {string} s
* @return {number}
*/
const dict = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000,
};
var romanToInt = function (s) {
let acc = 0;
for (let i = 0; i < s.length; i++) {
acc += dict[s[i]];
if ((s[i] === "V" || s[i] === "X") && s[i - 1] === "I") {
acc -= 2;
} else if ((s[i] === "L" || s[i] === "C") && s[i - 1] === "X") {
acc -= 20;
} else if ((s[i] === "D" || s[i] === "M") && s[i - 1] === "C") {
acc -= 200;
}
}
return acc;
};
How to solve?
로마자의 딕셔너리를 구성해서 문제를 풀었다.
1. (s[i] === "D" || s[i] === "M") && s[i - 1] === "C")
= s[i]가 "D"인지 s[i]가 "M"인지 판별한다.
2. (s[i] === "D" || "M") && s[i - 1] === "C")
= s[i]가 "D"인 경우 또는 문자열 "M"이 참으로 평가되는 경우. (항상 참)
연산 우선순위에 주의해야 한다.
코드 분석 소스
JS | Hash Table | With exlanation - Roman to Integer - LeetCode
View Karina_Olenina's solution of Roman to Integer on LeetCode, the world's largest programming community.
leetcode.com
var romanToInt = function(s) {
const sym = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000
}
let result = 0;
for (let i = 0; i < s.length; i++) {
const cur = sym[s[i]];
const next = sym[s[i + 1]];
if (cur < next) {
result += next - cur;
i++;
} else {
result += cur;
}
}
return result;
};
현재 value인 cur와 다음 value인 next를 미리 구해 지문에 나온 것과 같은 4, 9, 40, 90 ... 등의 경우
뺄셈을 한 값을 더한 뒤 i값을 늘려서 한번 넘겨준다.
'Problem solve' 카테고리의 다른 글
[Leetcode] 14. Longest Common Prefix (0) | 2023.04.18 |
---|---|
[Leetcode] 2619. Array Prototype Last (Javascript) (0) | 2023.04.12 |
[Leetcode] 66. Plus One (Javascript) (0) | 2023.04.10 |
[Leetcode] 46. Permutation (Javascript) (0) | 2023.04.09 |
[Leetcode] 20. Valid Parentheses (Javascript) (0) | 2023.04.08 |