코드카타 Day6

function romanToNum(s) {
const obj= {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000};
let sum = obj[s[s.length-1]];
for (let i=s.length-1; i>0; i--) {
  if (obj[s[i]] > obj[s[i-1]]) {
    sum -= obj[s[i-1]];
  }
  else {
    sum += obj[s[i-1]];
  }
}
  return sum ;
}

로마자를 숫자로 읽는 방법에서 기본적으로 더하지만, 왼쪽의 값이 더 작으면 뒤의 숫자에서 앞의 숫자를 빼준다.
위 조건에서 모든 글자들을 차례대로 비교해주는 것이 필요하다고 생각했고,
또 앞이 뒤보다 작다는말은 뒤가 앞보다 크다라는 말로 해석할수있다.
(이렇게 해주는 이유는 값을 계산할때 앞의 수를 음수로 처리하고 다음수를 더하는거보다 그냥 뒤의값에서 앞의수를 빼주는게 간편하기 때문)

변수를 가장 마지막에 오는 수로 지정을 해주고, for반복문을 뒤의 인덱스부터 돌린다.
for (let i=s.length-1; i>0; i--) {
if (obj[s[i]] > obj[s[i-1]]) {
sum -= obj[s[i-1]];
}
else {
sum += obj[s[i-1]];
}
}

좋은 웹페이지 즐겨찾기