Code Kata_romanToSum

dabin *.◟(ˊᗨˋ)◞.*·2021년 9월 6일
0

CodeKata

목록 보기
4/9
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 입니다. 
뒤의 숫자에서 앞의 숫자를 빼주면 됩니다. 9IX입니다.

IVX앞에 와서 4, 9 XL, C앞에 와서 40, 90 CD, M앞에 와서 400, 900

풀이

function romanToNum(s) {

let number = {
  I:1,
  V:5,
  X:10,
  L:50,
  C:100,
  D:500,
  M:1000
}
let arr = s.split('')
let arr2 = arr.map(x => number[x])
let sum =0;

for(let i=0; i<arr2.length; i++) {
  if (i === arr2.length - 1) {
    sum += arr2[i]
  } else if ( arr2[i] < arr2[i+1]) {
    sum += (arr2[i+1] - arr2[i]);
    i++;
  } else {
    sum += arr2[i]
  }
}
return sum;
}
  1. 로마자 s를 배열로 만든다.
  2. 숫자로 map
    ** 4나 9가 포함된 경우가 아니라면, 앞에 있는 문자가 더 크다.
  3. 제일 마지막 요소는 비교할 다음 요소 없으니 sum에 더해주기
  4. 더 작은 수가 앞에 있으면 (큰 수 - 작은 수)
  5. 아니라면 모든 배열의 요소 더하고 반환
profile
모르는것투성이

0개의 댓글