문제풀이 - 로마자 에서 숫자로 바꾸기

문제

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');

코드 해석


  1. 최종적인 값을 담을 result=0 과 알파벳에 따라 값을 담을 roma 라는 객체를 통해 선언

  2. for문을 통해 i 를 순회시키며 검사하는 요소보다 한자리 뒤에 있는 요소가 더 클 시엔 해당요소를 더하고 더 작을 시엔 해당요소를 뺀다.

  3. 더하고 뺀 값을 result 에 저장한 후 result를 return 한다.

어려웠던 점


IV 와 CM 처럼 앞의 문자가 뒤에 문자보다 값이 작으면 앞의 문자만큼 빼지는 규칙을 코드로 구현하는 것이 어려웠다
그래서 모든 경우의 수를 객체화 시킬까도 고민 했지만 좀 더 나은 코드를 위해 바로 뒤의 요소와 비교해서 하나하나의 값을 더하고 빼는 식으로 해보았다!

어렵다 ㅜ ㅜ

좋은 웹페이지 즐겨찾기