13. Roman to Integer 풀이 - js

fgStudy·2022년 5월 29일
0

코딩테스트

목록 보기
30/69
post-thumbnail

해당 포스팅은 릿코드 13번 Roman to Integer 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였으며 구현 문제이다.


문제

로마 숫자를 정수로 표현하면 되는 문제이다.
로마 숫자의 각 값은 아래와 같다.

  Symbol        Value
	I             1
	V             5
	X             10
	L             50
	C             100
	D             500
	M             1000

로마 숫자는 일반적으로 왼쪽에서 오른쪽으로 큰 것에서 작은 것 순으로 표기한다. 하지만 아래 6가지의 경우 오른쪽에서 왼쪽으로 작은 것에서 큰 것으로 표기되며 빼기가 적용된다. (IV, IX, XL, XC, CD, CM)

- 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.

풀이

로마 문자열을 loop 돌리면서 정수로 더해주면 되는 문제이다.
문제에서 오른쪽에서 왼쪽으로 작은 것에서 큰 것으로 표기되며 빼기가 적용되는 문자열이 있다고 명시되어 있다.

따라서 loop를 돌리면서 현재 문자(prev)와 그 다음 문자(next)의 값을 비교한 후 prev보다 next 값이 클 경우 (next - prev)를 더해준 후 i++를 해주어 next 다음 문자로 넘어가자. 그렇지 않는 경우 prev값을 더해준다.


전체 코드

/**
 * @param {string} s
 * @return {number}
 */
const Roman = {
    "I": 1,
    "V": 5,
    "X": 10,
    "L": 50,
    "C": 100,
    "D": 500,
    "M": 1000
}

var romanToInt = function(s) {
    let result = 0;
    for (let i = 0; i < s.length; i++) {
        prev = Roman[s[i]];
        next = Roman[s[i+1]];
        if (prev < next) {
            result += (next - prev);
            i++;
        } else {
            result += prev;
        }
    }
    return result;
};
profile
지식은 누가 origin인지 중요하지 않다.

0개의 댓글