로마자에서 숫자로 바꾸기
1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요. 로마 숫자를 숫자로 표기하면 다음과 같습니다.
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
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
const s = "MCDIX"; function romanToNum(s) { const Roma = { I : 1, V : 5, X : 10, L : 50, C : 100, D : 500, M : 1000, } const romArr= s.split(''); const numArr = romArr.map(el => Roma[el]); let sum=0; for(let i=0 ;i < numArr.length ;i++) { if(numArr[i] < numArr[i+1]) { sum = sum-numArr[i]; } else { sum = sum + numArr[i]; } ; } return sum; }
로마자 String을 각각 배열로 쪼개고 map함수를 써서 숫자로 치환한 뒤 조건에 따라 숫자들을 차례로 더해주었다.
1) 문자를 배열로 나누어주고const romArr= s.split(''); console.log(romArr); // [ 'M', 'C', 'D', 'I', 'X' ]
2) map함수를 사용하여 배열 내 문자들을 모두 앞서 정의해준 숫자로 치환하였다.
const numArr = romArr.map(el => Roma[el]); //Roma라는 객체에서 el 이라는 key값에 접근 console.log(numArr); //[ 1000, 100, 500, 1, 10 ]
3) 이제 배열 내 데이터를 각 숫자들을 더하거나 빼줘야 하는데
- 일단, sum이라는 변수를 0으로 정의하고
- for문을 사용해서numArr
배열의 앞뒤값을 각각 비교한뒤 (index 0,1값 비교 / index 1,2값 비교...)
- 뒷자리가 클 경우sum
에 앞 자리를 빼주고 뒷자리가 작거나 같을 경우는sum
에 앞자리수를 더해주는 것으로 접근했다.let sum=0; for(let i=0 ;i < numArr.length ;i++) { if(numArr[i] < numArr[i+1]) { sum = sum-numArr[i]; } else { sum = sum + numArr[i]; } ; }