[코딩테스트 풀기] 로마문자 숫자로 바꾸기

지원·2022년 9월 5일
0
post-thumbnail

문제 : 로마자에서 숫자로 바꾸기

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

생각한 방법

  1. string의 첫 인덱스가 참조하는 숫자와 다음 인덱스가 참조하는 숫자를 비교
  2. 첫번째 숫자가 더 크면 그대로 더해주기
  3. 두번째 숫자가 더 크면 두번째 숫자 - 첫번째 숫자 한 값을 더해주기
  4. 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++를 해주면 된다는 것!
매우 유용하였습니다!!!!!

profile
안녕하세요 지원입니다.

0개의 댓글