코드카타 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]];
}
}
Author And Source
이 문제에 관하여(코드카타 Day6), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@soojjung/코드카타-Day6저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)