[CodeKata] #06, 로마자에서 숫자로 바꾸기

April·2021년 5월 5일
0
post-thumbnail

문제

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


💡 풀이

  1. 인자로 받은 문자열을 배열로 변환하기
  2. .map()을 사용하여 인자로 받은 문자에 매핑되는 숫자로 된 배열로 리턴하기
  3. 리턴한 배열을 돌면서 배열의 바로 전과 후의 값 비교하여
  4. 4를 표현하는 조건식 처리
    • 뒤의 숫자가 크다면 앞의 숫자를 빼기

✅ 코드

function romanToNum(s) {
  const ROMA = {
    I:1,
    V:5,
    X:10,
    L:50,
    C:100,
    D:500,
    M:1000,
  }
  const numArr = s.split('').map(el => ROMA[el]);
  let sum = 0;
  for(let i=0 ;i < numArr.length ;i++) {
    if(numArr[i] < numArr[i+1]) {
      sum = sum - numArr[i];
    } else {
      sum = sum + numArr[i];
    }
  }
  return sum;
}

const s = "XXVII";
romanToNum(s);

🎈 What i learned

  • codekata를 진행할수록 많이 사용하는 함수 등이 무언지 눈에 보이게 되는 것 같다
  • 객체, 배열이 중요한 것은 물론이고 반복문, 조건문은 필수로 사용되니 기본기가 흔들리지 않도록 해야겠다
  • .split(), .join(), substr 등등 자주 사용되는 함수도 놓지지 않도록 하자!
profile
🚀 내가 보려고 쓰는 기술블로그

0개의 댓글