[Code Kata] Week 02-01

AM_I_TRASH·2022년 7월 17일

code-kata

목록 보기
4/6

1~3999 사이의 로마자를 의미하는 문자열을 받았을 때, 그에 해당하는 숫자를 반환해주세요. 로마 숫자를 숫자로 표기하면 다음과 같습니다.
I: 1,
V: 5,
X: 10,
L: 50,
C: 100,
D: 500,
M: 1000
유의할 점은 4를 표현할 때는 IIII가 아니라 IV, 9를 표현할 때는 VIIII가 아니라 IX 입니다. 뒤의 숫자에서 앞의 숫자를 빼주면 쉽게 구현할 수 있습니다.

const romeToInt = strs => {
  const romeNum = {
    'I': 1,
    'V': 5,
    'X': 10,
    'L': 50,
    'C': 100,
    'D': 500,
    'M': 1000
  }
  let result = 0
  const romeArrStr = strs.split("")
  const romeArrInt = []
  
  for(i in romeArrStr){
    romeArrInt.push(romeNum[romeArrStr[i]])
  }
  
  for(let i=0; i<romeArrInt.length; i++){
    if(romeArrInt[i+1] > romeArrInt[i]){
      result -= romeArrInt[i]
    } else {
      result += romeArrInt[i]
    }
  }
  return result
}

생각 외로 단순했던 문제였던 것 같다.

로마자를 key값으로, 아라비아 숫자를 value값으로 가지는 객체를 선언한다.
그 후 인자로 받은 strs를 쪼갈라 배열로써 저장하고, 각 글자마다 해당하는 데이터쌍으로 변환을 해준다.

그 후 for문을 돌려 찢어진 숫자들을 한데 모으는 작업을 하게 되는데, 이 때 문제에 명시된 개꿀팁인 뒤의 숫자에서 앞의 숫자를 빼주면 쉽게 구현할 수 있다는 특성을 이용해 자신 바로 뒤에 있는 수가 자신보다 크다면 스스로를 결과값에서 제하는 로직을 구현했다.

profile
짝퉁 프로그래머

0개의 댓글