[Algorithm] [초급] 로마 숫자 Integer로 변형하기

Ji Ho Choi
코드팩토리
Published in
3 min readMay 27, 2019

안녕하세요 소프트웨어 엔지니어 최지호입니다.

아래 블로그를 가시면 더욱 많은 정보를 접해보실 수 있습니다.

오늘은 일상에도 쓰일법한 로마 숫자 Integer로 변형하기 알고리즘에 대해 알아보도록 하겠습니다.

문제

로마 숫자가 주어졌을 때 Integer로 변경을 하는 문제입니다. 로마 숫자 테이블은 아래와 같습니다.

심볼           
I 1
V 5
X 10
L 50
C 100
D 500
M 1000

다만 예외가 몇 가지 있습니다. V의 경우 5를 리턴하면 되지만 IV의 경우 4를 리턴해야 하고 IX의 경우 9를 리턴해야 합니다. 또한 XL의 경우 40, XC의 경우 90이 리턴되는 등 앞 숫자가 뒤 숫자보다 작으면 뺄셈 역할을 하게 됩니다.

풀이

위의 설명 그대로 푸시면 됩니다. 각 심볼의 값을 테이블 형태로 메모리에 올려두시고 다음 인덱스의 심볼이 현재 인덱스의 심벌보다 값이 적을 때 현재 인덱스의 심볼 값을 총 값에서 빼주면 됩니다. Javascript의 reduce 함수를 사용해 풀어보도록 하겠습니다.

/**
* @param {string} s
* @return {number}
*/
const
romanToInt = function (s) {
// 로마 숫자 테이블
const
romanMap = {
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
};

const arr = s.split('');

return arr.reduce((acc, item, index) => {
// 현재 로마 숫자의 Integer 값
const
curVal = romanMap[item];
// 다음 로마 숫자의 Integer 값
const
nextVal = romanMap[arr[index + 1]];

// 다음값이 더 높을경우 현재값 뺄셈 아닐경우 덧셈
if
(nextVal > curVal) {
acc -= curVal;
}else{
acc += curVal;
}

return acc;

}, 0);
};

아래 문제를 참고하였습니다.

--

--