로마자에서 숫자로 바꾸기

Jihyun-Jeon·2022년 6월 13일
0

1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요. 로마 숫자를 숫자로 표기하면 다음과 같습니다.
로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다. III = 3 XII = 12 XXVII = 27 입니다.

SymbolValue
I1
V5
X10
L50
C100
D500
M1000

그런데 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 numObj = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };

  // 1.이미 선언된 numObj에 해당하는 값이 있으면 그대로 반환.
  if (numObj[s]) {
    return numObj[s];
  }

  // 2.없으면 각 문자를 쪼개고, 해당하는 숫자로 변환하여 배열로 만듦.
  const numArr = s.split('').map((el) => numObj[el]);

  // 3. numArr와 numArr를 내림차순 한 결과가 같으면 numArr의 모든 요소를 더하여 반환함.
  const sortArr = [...numArr].sort((a, b) => b - a);
  if (numArr.join('') === sortArr.join('')) {
    return numArr.reduce((acc, cur) => (acc += cur));
  }

  // 4. 3번이 아니라면, numArr을 역순으로 순회하면서 다 더해줌.
  // !! 이때 순회하면서 해당 요소가 다음 요소보다 작으면, 그 수는 -1를 곱한 값으로 더함.
  for (let i = 0; i < numArr.length; i += 1) {
    if (numArr[i] < numArr[i + 1]) {
      numArr[i] *= -1;
      result += numArr[i];
      continue;
    }
    result += numArr[i];
  }
  return result;
}

🔶 피드백

로마자를 넣으면 숫자가 나오는 문제인데,
숫자가 나오면 로마자가 리턴되는 문제인 줄 알았다.😭
다 풀고 나서야 알게 되었는데... 생각보다 단순한 문제였다ㅠㅠ

문제를 잘 읽자!!

0개의 댓글