상세 컨텐츠

본문 제목

로마 숫자 변환 - Javascript

Programming/Algorithm

by 쌩우 2019. 7. 13. 07:09

본문

문자열로 받은 로마숫자를 실생활에 사용 중인 아라비아 숫자로 변환하는 알고리즘.

  /*
 * Ex:
 * translateRomanNumeral("LX") // 60
 * 큰 로마숫자 앞에 작은 로마 숫자가 나타나면, 그 때에 가산 표기가 적용된다.
 * 큰 것의 앞에는 오직 하나의 작은 로마 숫자가 나타나는 것을 가정할 수 있다.
 *
 * Ex:
 * translateRomanNumeral("IV") // 4
 * 유효하지 않은 입력값에는 null을 return해준다.
 */

var DIGIT_VALUES = {
  I: 1,
  V: 5,
  X: 10,
  L: 50,
  C: 100,
  D: 500,
  M: 1000
};

var translateRomanNumeral = function(romanNumeral) {
  // TODO: Implement me!
  if (typeof romanNumeral !== 'string') {
    //문자가 아닌 input이라면 유효하지 않음
    return null;
  } else {
    if (romanNumeral === '') {
      //문자이지만 빈 문자열 input
      return 0;
    } else {
      //이 외에는 로마문자열이라고 일단 가정
      result = 0;
      //문자열을 순회하면서
      //현재 위치 기준으로 바로 뒤의 문자를 봤을 때,
      //1) DIGIT_VALUES key 배열 기준, 자신 바로 뒤의 key가 있는 경우면 if(string[i+1] === Object.keys(DIGIT_VALUES)[Object.keys(DIGIT_VALUES).indexOf(string[i]) + 1])
      //result -= (DIGIT_VALUES[string[i]])
      //2) DIGIT_VALUES key 배열 기준, 바로 뒤의 key가 아니면 result += (DIGIT_VALUES[string[i]])
      let i = 0;
      while (i < romanNumeral.length) {
        if (DIGIT_VALUES[romanNumeral[i]] < DIGIT_VALUES[romanNumeral[i + 1]]) {
          result -= DIGIT_VALUES[romanNumeral[i]];
          i++;
        } else {
          result += DIGIT_VALUES[romanNumeral[i]];
          i++;
        }
      }
      return result;
    }
  }
};

  

관련글 더보기

댓글 영역