Roman to Integer

Hyor·2022년 3월 15일
0
post-custom-banner

roma 알파벳이 입력되면 해당 알파벳에 맞는 값을 리턴하는 문제이다.
roma알파벳 = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };

Input: s = "MCMXCIV"
Output: 1994

romaPlus 객체를 선언하여 검사 i번째 요소와 i + 1번째 요소를 조합하여 체크한다.
romaPlus 객체에 key 가 있다면 해당 값을 result에 더하고 i++ 를 해준다.
없다면 기본 roma알파벳 객체에서 값을 찾아 result 에 더해준다.

var romanToInt = function (s) {
  const roma = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };
  let result = 0;
  for (let i = 0; i <= s.length - 1; i++) {
    const current = s[i];
    const second = s[i + 1];
    const romaPlus = { IV: 4, IX: 9, XL: 40, XC: 90, CD: 400, CM: 900 };

    const te = romaPlus[current + second];
    if (te) {
      result += te;
      i++;
    } else {
      result += roma[current];
    }
  }
  return result;
};

다른 사람의 풀이를 보니 이 방식이 runtime 도 적고 간단하여 적어본다.
현재값과 다음 값을 비교하여 현재값이 더 작다면 second - current를 result 에 더하고 i++을 해준다.
current 가 더 크다면 current를 더해준다.
이 방식은 roma 알파벳 순서보장이 있기 때문에 가능하다. 이 문제를 풀면서 문제를 잘 읽어보고 이용해야겠다는 생각이 들었다.

var romanToInt = function (s) {
  const roma = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };
  let result = 0;
  for (let i = 0; i <= s.length - 1; i++) {
    const current = roma[s[i]];
    const second = roma[s[i + 1]];

    if (current < second) {
      result += second - current;
      i++;
    } else {
      result += current;
    }
  }
  return result;
};
profile
개발 노트
post-custom-banner

0개의 댓글