문제풀이 - 로마자 에서 숫자로 바꾸기
문제
1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요. 로마 숫자를 숫자로 표기하면 다음과 같습니다.
로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다. 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
구현 코드
function romanToNum(s) {
let result = 0;
const roma = {
I : 1,
V : 5,
X : 10,
L : 50,
C : 100,
D : 500,
M :1000
}
for(let i = 0; i<s.length; i++){
if(roma[s[i]]<roma[s[i+1]])
{
result -= roma[s[i]];
}else{
result += roma[s[i]]
}
}
return result
}
romanToNum('MCMXCIV');
코드 해석
-
최종적인 값을 담을 result=0 과 알파벳에 따라 값을 담을 roma 라는 객체를 통해 선언
-
for문을 통해 i 를 순회시키며 검사하는 요소보다 한자리 뒤에 있는 요소가 더 클 시엔 해당요소를 더하고 더 작을 시엔 해당요소를 뺀다.
-
더하고 뺀 값을 result 에 저장한 후 result를 return 한다.
어려웠던 점
IV 와 CM 처럼 앞의 문자가 뒤에 문자보다 값이 작으면 앞의 문자만큼 빼지는 규칙을 코드로 구현하는 것이 어려웠다
그래서 모든 경우의 수를 객체화 시킬까도 고민 했지만 좀 더 나은 코드를 위해 바로 뒤의 요소와 비교해서 하나하나의 값을 더하고 빼는 식으로 해보았다!
어렵다 ㅜ ㅜ
Author And Source
이 문제에 관하여(문제풀이 - 로마자 에서 숫자로 바꾸기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yshh0514/문제풀이-로마자-에서-숫자로-바꾸기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)