WeCode Kata Day 6

luneah·2021년 12월 6일
0

WeCode Kata

목록 보기
6/20
post-thumbnail

문제

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

Thinking Algorithm

  1. 모든 로마 문자와 숫자를 매칭해 둔 객체를 선언
  2. 주어진 문자를 map 함수를 이용해서 숫자로 변환
  3. 2의 새로운 배열을 for문으로 순환
    3-1. 뒤의 숫자가 앞의 숫자보다 클 경우
        1)   뒤에서 앞 숫자 빼줌
        2)   i++를 더해서 현재 i에서 i+2로 점프할 수 있게 처리
    3-2. 이외의 경우 그냥 더해줌

Code

function romanToNum(s) {
  let roman = {
      I: 1,
      V: 5,
      X: 10,
      L: 50,
      C: 100,
      D: 500,
      M: 1000
  }
  
  let strArr = s.split('');
  let numArr = strArr.map(el => roman[el]);
  let sum = 0;
  
  for (let i = 0; i < numArr.length; i++) {
      if (numArr[i] < numArr[i+1]) {
          sum += (numArr[i+1] - numArr[i]);
          i++;
      } else {
          sum += numArr[i];
      }
  }
  
  return sum;
}
profile
하늘이의 개발 일기

0개의 댓글