로마 숫자를 숫자로 표기하는 문제이다.
Input/Output
Input | Output |
III | 3 |
IV | 4 |
IX | 9 |
LVIII | 58 |
MCMXCIV | 1994 |
1차시도(실패)
난 처음에 단순하게만 생각하고, for of 로 1자씩 나눈다음, 스위치문으로 계산했다.
이제 와서 생각해보면 당연히도 오류.
왜 4랑 9를 생각못했을까, <-멍충이
/**
* @param {string} s
* @return {number}
*/
var romanToInt = function(s) {
let sum = 0;
for(let i=0;i<s.length;i++){
// console.log(i);
switch (i){
case 'I':
sum+=1;
break;
case 'V':
sum+=5;
break;
case 'X':
sum+=10;
break;
case 'L':
sum+=50;
break;
case 'C':
sum+=100;
break;
case 'D':
sum+=500;
break;
case 'M':
sum+=1000;
break;
}
// console.log(sum);
}
return sum;
};
2차시도(성공)
일단 switch보다는 데이터를 객체화 하는게 훨씬 더 간결하고 깔끔하다.
IV랑 IX 말고는 다른 경우의 수는 없을까...
다행히 7이나 8은 VII, VIII로 표기하니 문제될게 없고, 2나 3도 괜찮다.
2글자까지만 고려하면 될것 같다.
/**
* @param {string} s
* @return {number}
*/
var romanToInt = function(s) {
// s = 'IV';
const map = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
};
let sum = 0;
for(let i=0;i<s.length;i++){
let num = map[s[i]]; //현재 문자 => 숫자화
let nextNum = map[s[i+1]]; //다음 문자 => 숫자화
// console.log(num, nextNum);
if(num<nextNum) {
sum+=nextNum-num;
i++;
} else {
sum+= num;
}
}
return sum;
};
728x90
'프로그램 강좌' 카테고리의 다른 글
[LeetCode]20. Valid Parentheses (0) | 2021.11.22 |
---|---|
[LeetCode]14. Longest Common Prefix - javascript (0) | 2021.11.20 |
[LeetCode]9. Palindrome Number - javascript (0) | 2021.11.18 |
[LeetCode] 1: TwoSum - javascript (0) | 2021.11.17 |
CSS 지원 브라우저 확인 (0) | 2021.09.27 |