[codekata]Week2_Day1

문제

로마자에서 숫자로 바꾸기

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

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


풀이

  1. romanToNum 함수 안에 로마자를 key, 숫자를 value로 하는 객체 만들기
  2. 반환할 변수 result를 선언하고 0으로 초기화
  3. 인자로 받은 로마자 s 순회 -> 로마자를 두 개씩 비교해서 오른쪽에 더 큰 숫자가 오면 큰 숫자에서 작은 숫자를 빼고 같거나 작으면 더하기(크기를 두 개씩 비교해야하기때문에 비교할 대상이 없는 마지막 문자는 제외하고 순회해야 함)
  4. (result + 비교하지 않은 마지막 숫자) 리턴
function romanToNum(s) {
  // 여기에 코드를 작성해주세요.
  const numbers = {
    'I' : 1,
    'V' : 5,
    'X' : 10,
    'L' : 50,
    'C' : 100,
    'D' : 500,
    'M' : 1000,
  }

  let result = 0;

  for (let i = 0; i < s.length - 1; i++){
    result += numbers[s[i + 1]] > numbers[s[i]] ? -1 * numbers[s[i]] : numbers[s[i]];
  }
  return result + numbers[s[s.length - 1]];
}