코드노트

자바스크립트 로마숫자 코딩테스트 문제 풀이 Roman to Integer 본문

Code note/자바스크립트 알고리즘 문제풀이

자바스크립트 로마숫자 코딩테스트 문제 풀이 Roman to Integer

코드노트 2022. 9. 8. 21:02

Roman to Integer 문제 설명

더보기

Roman to Integer

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

로마 숫자는 I, V, X, L, C, D, M의 7가지 기호로 표시됩니다.

예를 들어, 2는 로마 숫자로 II로 표기되며 두 개만 더하면 됩니다.

12는 단순히 X + II인 XII로 작성됩니다. 숫자 27은 XXVII, 즉 XX + V + II로 표기됩니다.

로마 숫자는 일반적으로 왼쪽에서 오른쪽으로 큰 것에서 작은 것 순으로 표기합니다.

그러나 4에 대한 숫자는 IIII가 아닙니다. 대신 숫자 4는 IV로 기록됩니다.

1은 5보다 앞에 있기 때문에 빼서 4가 됩니다.

IX로 쓰여진 숫자 9에도 동일한 원칙이 적용됩니다.

빼기가 사용되는 6가지 경우가 있습니다.

 

V(5)와 X(10) 앞에 I를 놓아 4와 9를 만들 수 있습니다.
X는 L(50)과 C(100) 앞에 위치하여 40과 90을 만들 수 있습니다.
C는 D(500)와 M(1000) 앞에 위치하여 400과 900을 만들 수 있습니다.

 

로마 숫자가 주어지면 그것을 정수로 변환하십시오.

 

문제를 이해하고 나면 간단한 문제였다. 처음에 이해하는데 조금 시간이 걸린거 같다..

 

let s = "MCMXCIV";
var romanToInt = function (s) {
  let res = 0;
  let romeNum = {
    I: 1,
    V: 5,
    X: 10,
    L: 50,
    C: 100,
    D: 500,
    M: 1000,
  };
  let rome_arr = s.split("");
  let num_arr = rome_arr.map((rome) => romeNum[rome]);

  for (let i = 0; i < num_arr.length; i++) {
    if (num_arr[i] < num_arr[i + 1]) {
      res -= num_arr[i];
    } else {
      res += num_arr[i];
    }
  }
  return res;
};
console.log(romanToInt(s));
/*
뒤의 숫자가 작은 값 : 1000 > 100 = 더할 값 : 1000
첫번째 숫자보다 뒤의 숫자가 큰 값 : 100 < 1000 = 뺄 값 : 100
뒤의 숫자가 작은 값 : 1000 > 10 = 더할 값 : 1000
첫번째 숫자보다 뒤의 숫자가 큰 값 : 10 < 100 = 뺄 값 : 10
뒤의 숫자가 작은 값 : 100 > 1 = 더할 값 : 100
첫번째 숫자보다 뒤의 숫자가 큰 값 : 1 < 5 = 뺄 값 : 1
뒤의 숫자가 작은 값 : 5 > undefined = 더할 값 : 5
정답 : 1994
*/

- symbol, value 가진 객체를 만들어준다.

- 찾고자하는 문자를 split으로 나누어 배열로 만들었다.

- map을 통해서 각 문자key에 맞는 value값으로 새로운 배열을 만들었다.

- 반복문을 돌리면서 조건으로 큰 로마숫자 앞에 작은 로마숫자가 나타나면 값을 더해주고 아니면 빼는 조건을 넣어준다.

* 4와 9를 만드는 조건을 만들어야하기 때문이다!

 

- 값이 계산되는 걸 출력해보면 더하기 빼기를 하면서 4와 9를 만들고 1, 10, 100 단위는 더하기만 하게 된다.