13. 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 two one's added together. 12 is written as XII, which is simply X + II. The number 27 is written as XXVII, which is XX + V + II.
Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:
- 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.
Given a roman numeral, convert it to an integer.
Example 1:
Input: s = "III"
Output: 3
Explanation: III = 3.
Example 2:
Input: s = "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.
Example 3:
Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
계획
문제 설명
이 문제는 로먼 스트링을 숫자로 바꾸게 됩니다.
문제에서 설명된 주의 해야할점은
1. 반복적으로 나오면 더하면된다. ex) III -> 3
2. input으로 주어지는 s 는 보통 M -> I 순으로 큰수부터 주어진다.
3. 하지만 예시 3 럼 C(100)가 먼저나와야되는데 X(10)가 먼저 나온경우, 큰수에서 작은수를 뺀다. 100-10 = 90
구현 전략
해쉬맵으로 값들로 먼저 로먼과 정수를 입력해줍니다.
그리고 input 스트링의 값을 하나씩 접근하며 만약 다음값의 value가 현재값의 value보다 크다면 예시 3 처럼 value끼리 빼주는 작업을 한후 result에 추가하고, 같다면 value를 얻어서 더해주고, 현재값이 다음값보다 크다면 정상적으로 map에서 value를 접근한뒤 더해줍니다.
해설
var romanToInt = function(s) {
let array = [...s]
let result = 0
let value = new Map()
console.log(array)
value.set('I', 1);
value.set('V', 5);
value.set('X', 10);
value.set('L', 50);
value.set('C', 100);
value.set('D', 500);
value.set('M', 1000);
›
for(let i = 0; i < array.length; i++){
if(value.get(array[i]) > value.get(array[i+1])){
result = result+value.get(array[i])
continue
}
if(value.get(array[i]) < value.get(array[i+1])){
result = result+ value.get(array[i+1]) - value.get(array[i])
i++
continue
}
result= result +value.get(array[i])
}
return result
};
20분
'개발공부 > LeetCode' 카테고리의 다른 글
39. Combination Sum - 쉬운설명 반복문 사용 (0) | 2022.04.21 |
---|---|
171. Excel Sheet Column Number - 쉬운설명 반복문 사용 (0) | 2022.04.05 |
[JavaScript]45. Jump Game II (0) | 2022.03.31 |
[JavaScript] 991. Broken Calculator 쉬운 설명 (0) | 2022.03.24 |
[Javascript] 1663. Smallest String With A Given Numeric Value -쉬운 설명 (0) | 2022.03.22 |