본문 바로가기
Research/Coding Test

13. Roman to Integer

by RIEM 2023. 3. 20.
728x90

Problem

https://leetcode.com/problems/roman-to-integer/

Intuition

인수로 받는 텍스트를 split('')으로 쪼갠 배열을 루프로 돌면서 계산을 하는 방식을 생각했으나, 로직이 복잡해진다는 생각을 했다. 이보다 좀 더 간단한 방식으로 계산을 할 수 있지 않을까.

Approach

로마 숫자 로직 계산의 핵심은 예외 처리다. 이 예외 6개만 처리를 해주면 되기 때문에 이를 계산한 숫자로 바로 치환해주면 되지 않을까?

모든 수가 담긴 객체를 만들어서, 예외 숫자부터 '+num' 형식으로 치환해준 뒤, 마지막에 이 텍스트를 eval() 메소드로 계산해서 해결했다.

Code

/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function(s) {

  let input = s;

  const dict = {
    'IV': '+4',
    'IX': '+9',
    'XL': '+40',
    'XC': '+90',
    'CD': '+400',
    'CM': '+900',
    'I': '+1',
    'V': '+5',
    'X': '+10',
    'L': '+50',
    'C': '+100',
    'D': '+500',
    'M': '+1000'
  };

  const keys = Object.keys(dict);

  for(let i = 0; i < keys.length; i++) {
    input = input.replaceAll(keys[i], dict[keys[i]]);
  }
  return eval(input)

};
728x90

'Research > Coding Test' 카테고리의 다른 글

스택/큐_기능개발  (0) 2023.03.21
스택/큐_같은 숫자는 싫어  (0) 2023.03.21
20. Valid Parentheses  (0) 2023.03.21
1. Two Sum  (0) 2023.03.19
724. Find Pivot Index  (0) 2023.03.19

댓글