[Day 6] 로마자에서 숫자로 바꾸기

누리·2022년 10월 24일
0

CodeKata

목록 보기
6/7

📅 22.10.12
📖 파트너 : 정관훈

문제설명 :
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

객체를 이용한 key value 활용

문자열로 받은 변수를 배열로 반환하고 각각의 문자열 요소에 대응하는 value값을 반환하도록 객체를 만들어 숫자를 계산하는 방식으로 생각했다

function romanToNum(s) {
  // 여기에 코드를 작성해주세요.
  result = 0;
  const newArr = s.split("");
  romeNum = {
    "I": 1,
    "V": 5,
    "X": 10,
    "L": 50,
    "C": 100,
    "D": 500,
    "M": 1000
  }

  const mapped = newArr.map((el) => romeNum[el]);

  for (let i = 0; i < mapped.length; i++) {
    if (mapped[i] < mapped[i + 1]) {
      result -= mapped[i]
    } else {
      result += mapped[i]
    }
  }
  return result;

}

이 코드를 짤 때 유의해야 할 점은

  • 초기값으로 0을 설정해놓고 반복문을 돌면서 값을 축적하는 식으로 생각해야하는데
  • 반복문안의 조건문을 잘 생각 해야한다. 처음에는 mapped[i] < mapped[i+1] 조건으로 i의 마지막 값을 접근할수 없어서 안될것이라 생각했는데 이 조건을 충족 하지 않을 시에 else 조건으로 빠져서 mapped[i]를 합산해주면 되는 문제였다
profile
프론트엔드 개발자

0개의 댓글