[LeetCode] Roman to Integer

코테연습|2022. 2. 13. 19:42

https://leetcode.com/problems/roman-to-integer/

 

로마문자로 표기된 숫자를 Integer로 변환하는 문제.

 

우선 로마표기법 숫자는 큰 숫자를 의미하는 문자부터ㅡ

작은 숫자를 의미하는 문자까지 왼쪽에서 오른쪽으로 차례대로 배치된다.

단, IV, IX 등 작은 숫자가 앞에 배치되면 다르게 계산된다.


I = 1
II = 2
III = 3
IV = 4 (IIII로 표기하지 않는다.)
V = 5

VI = 6 ...

 

우선 로마문자가 들어간 배열 ['I', 'V',..] 과 그 순서대로 숫자가 들어간 배열 [1, 5,..] 을 만들어 준다.
입력값의 맨 앞부터 끝까지 배치된 문자와 roman의 문자를 비교해서,
두 문자가 일치하면 같은 위치의 Integer 값을 꺼낸다.

 

그리고 위 규칙을 통해.. 예를 들어서 XIV라는 입력이 들어 왔을때,

 

문자 X I V
배열index 0 1 2
수(=a_i) 10 1 5

 

a0 = 10, a1 = 1, a2 = 5와 같이 a1<a2이면 a1은 전체 숫자에서 빼 주는 방식으로 하려 했다.

 

하지만.. a1과 a2를 비교하려니 구현이 쉽지 않아서(...)

그냥 각 문자와 일치하는 숫자가 차례대로 들어가는 배열을 만들고,

그 배열 안에서 순서대로 비교해서, 앞 숫자보다 뒷 숫자가 더 크면 빼도록 했다.

var romanToInt = function(s) {
    var roman = ['I', 'V', 'X', 'L', 'C', 'D', 'M'];
    var nums = [1,5,10,50,100,500,1000];
    var number = [];
    var answer = 0;
    for(i=0;i<s.length;i++){
        for(j=0;j<7;j++){
            if(s[i]==roman[j]){
               number.push(nums[j]);
            }
    }
}
    for(k=0;k<number.length;k++){
        if(number[k]<number[k+1]){
            answer = answer - number[k];
        }
        else{
            answer = answer + number[k];
        }
    }
    return answer;
}

 

아무런 힌트도 보지 않고 처음부터 끝까지 스스로 풀어서 뿌듯한 문제!

여기서 romans와 nums 배열을 하나의 객체로 표현하면 더 간단하게도 풀 수 있다...

댓글()