본문 바로가기

프로그램 강좌

[LeetCode] 13. Roman to Integer - javascript

로마 숫자를 숫자로 표기하는 문제이다.

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