로마자에서 숫자로 바꾸기
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 입니다. 뒤의 숫자에서 앞의 숫자를 빼주면 됩니다. 9는 IX입니다.
I는 V와 X앞에 와서 4, 9 X는 L, C앞에 와서 40, 90 C는 D, M앞에 와서 400, 900
처음에 어떻게 풀어야할지 아예 감이 잡히지 않았는데 힌트는 앞에 숫자를 빼준다는 내용이었다.
배열로 받아서 해당 배열과 그 다음 배열을 비교해서
만약에 작다면 (el < ar[idx + 1]) result -= el
빼주고 아니라면 더해준다.
function romanToNum(s) { // 여기에 코드를 작성해주세요. let result = 0; const roman = { 'I' : 1, 'V' : 5, 'X' : 10, 'L' : 50, 'C' : 100, 'D' : 500, 'M' : 1000 } const stringArray = s .split('') // ['X','X','V','I','I'] .map(a => roman[a]) // 숫자를 배열로 반환함 // 키값을 모를때, 가져오는 방식 대괄호 // [10,10,5,1,1] .map((el, idx, ar) => { // 마지막 인자값은 배열을 통째로 사용한다. if (el < ar[idx + 1]) { // 현재 el과 그 다음 el을 비교한다. 여기서 ar은 전체 배열이며, 얘는 통 배열이므로 변한다거나 하지 않는다. result -= el } else { result += el } }) return result; } console.log(romanToNum('XXVII')) module.exports = { romanToNum }; // MM / CM / LXXX / VII // 2000+900+80+7 // [“M”, “M”, “C”, “M”, “L”, “X”, “X”, “X”, “V”,“I”, “I”] // 1000, 1000, 100, 1000, 50, 10, 10, 10, 5, 1, 1 // 450 = CDL // C D L // 100 500 50