Roman Numerals Decoder

이조은·2021년 1월 2일
0

Code Kata

목록 보기
11/15
post-thumbnail

문제

로마 숫자를 정수로 변환 해야한다. 여기서 각 자리 문자의 변환값이 내림차순이라면 +, 오름차순이라면 -

Symbol    Value
 I          1
 V          5
 X          10
 L          50
 C          100
 D          500
 M          1,000
solution('XXI'); // should return 21
solution('IV'); // should return 4

나의 풀이

🙆🏻‍♀️ 첫 번째 풀이

각 자리의 문자를 숫자로 변환하는 것을 고민했는데 역시나 이럴 때는 객체만한 것이 없는 것 같다.

일단 split한 인자의 value를 구해서 더했는데, 이 문제의 핵심은 오름차순인 경우에는 어떻게 처리할 것인가다. 단순히 이전 인덱스의 값이 더 작다면 빼고, 아니면 더하는 로직을 구현했다.

여기서 사실 splitted는 필요 없다. string 또한 index를 가지기 때문에 for문으로 한 요소씩 loop할 수 있다. 항상 for문을 쓰면 split을 습관적으로 쓴다는 것이 문제.. 명심하자.

function solution(roman) {
   const value = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };
   const splitted = roman.split("");
  let result = 0;
  for (let i = 0; i < splitted.length; i++) {
    if (value[splitted[i]] < value[splitted[i + 1]]) {
      result -= value[splitted[i]];
    } else result += value[splitted[i]];
  }
  return result;
}

✅ 첫 번째 풀이 리팩토링

function solution(roman) {
  const value = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };
  let result = 0;
  for (let i = 0; i < roman.length; i++) {
    value[roman[i]] < value[roman[i + 1]]
      ? (result -= value[roman[i]])
      : (result += value[roman[i]]);
  }
  return result;
}
profile
싱글벙글

0개의 댓글