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
생각한 방법
- string의 첫 인덱스가 참조하는 숫자와 다음 인덱스가 참조하는 숫자를 비교
- 첫번째 숫자가 더 크면 그대로 더해주기
- 두번째 숫자가 더 크면 두번째 숫자 - 첫번째 숫자 한 값을 더해주기
- 3번의 경우에는 for문에서 한단계 건너뛰기 (이게 중요함!)
풀이 코드
function romanToNum(s) { // 참조할 객체 하나 만들어 주기 let roma = { "I" :1, "V" :5, "X" : 10, "L" : 50, "C" : 100, "D" : 500, "M" : 1000 } // 결과값을 나타낼 result 변수 만들어 두기 let result = 0; for (i=0 ; i<s.length; i++) { if (roma[s[i]]< roma[s[i+1]]) {result +=roma[s[i+1]]-roma[s[i]] ; i++} // 앞의 수가, 뒤의 수보다 작으면, 뒷수 - 앞수 한 값을 result에 더해주고 // 뒷 수는 이미 계산이 끝난 알파벳이기 때문에 i ++를 통해, 뒷수 한단계 건너뛰기 else {result += roma[s[i]]} } // 그렇지 않으면 그냥 그값 그대로 더해주기 return result ; }
알게 된 것
for문에서 한단계를 건너뛰려면 i++를 해주면 된다는 것!
매우 유용하였습니다!!!!!