[알고리즘] - 로마숫자 -> 아라비아숫자

Baoro·2022년 2월 27일
0

알고리즘

목록 보기
1/2

1. 문제 내용

로마자에서 숫자로 바꾸기

1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요. 로마 숫자를 숫자로 표기하면 다음과 같습니다.

Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다. III = 3 XII = 12 XXVII = 27 입니다.

그런데 4를 표현할 때는 IIII가 아니라 IV 입니다. 뒤의 숫자에서 앞의 숫자를 빼주면 됩니다. 9는 IX입니다.

I는 V와 X앞에 와서 4, 9 X는 L, C앞에 와서 40, 90 C는 D, M앞에 와서 400, 900


2. 알고리즘 구상

우리조는 일단 로마숫자 I,V,X,L,C,D,M를 key로 그에 대한 아라비아 숫자를 value로 딕셔너리를 만들었다.
로마숫자는 앞자리가 뒷자리보다 작은 경우 뒤의 숫자에서 앞에 숫자를 빼고 앞자리가 뒷자리보다 크면 더하는 것을 발견하고 이것을 if문으로 구현하였다.


3. 완성코드

var romanToInt = function(s) {
    const table= {
         "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 front = s[i];
        let back = s[i+1];
        let val;
        
        if(table[front] < table[back]){
            val = -table[front];
        }
        else{
            val = table[front];
        }
        sum = sum + val;
    }
   return sum;
    
};

4. 어려웠던 점

문제가 있을 때마다 배열로 접근하는 습관때문에 객체를 사용하는데 있어서 많은 어려움이 있었다.
key값과 value값에 접근하는 것부터 각각의 값을 비교하고 저장하는 것이 생각보다 많은 시간이 들었다.
알고리즘 부분은 인터넷에서 로마숫자,아라비아 숫자 변환 알고리즘을 검색해보기 전까지 엄청난 삽질?을 했었다. 간단한 알고리즘을 너무 어렵게 생각했던 것 같다.

profile
꾸준히.... 깔끔하게.... 끝까지....

0개의 댓글