알고리즘 문제풀이 12

hyunju-song·2020년 10월 25일
0

ALGORITHM

목록 보기
13/14

문자열이 주어진다면, 각 문자에 해당하는 수들로 환산하고
누적해서 더해준다.
가령 LC가 주어진다면, L에 해당하는 수와 C에 해당하는 수를 누적해서 더해준다.
그런데 만약에 LCS이렇게 수가 주어졌을때, L, C에 해당하는 수는 더해주지만, C에 해당하는 수가 S에 해당하는 수보다 작은 경우에는, S에서 C를 뺀수를 더해주어야 한다.
해당 조건때문에 새로운 조건을 추가하고 문제를 처음부터 다시 되짚었던 기억이 난다.

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

var translateRomanNumeral = function(romanNumeral){
  if(typeof romanNumeral === 'string'){
    if(romanNumeral.length === 1){
      return DIGIT_VALUES[romanNumeral];
    } else if(romanNumeral.length >1){
      let result = DIGIT_VALUES[romanNumeral[0]];
      //일단 첫번째 글자에 해당하는 수를 먼저 선언해둠 그리고 하단에서 반복문을 돌면서 누적해서 더해줄 예정
      for(let i=0; i<romanNumeral.length-1; i++){
        if(DIGIT_VALUES[romanNumeral[i]] < DIGIT_VALUES[romanNumeral[i+1]]){
          let sub = DIGIT_VALUES[romanNumeral[i+1]] - DIGIT_VALUES[romanNumeral[i]];
          result = result - DIGIT_VALUES[romanNumeral[i]] + sub;
          //이렇게 해준 이유는, 가령 누적해오면서 "10[0번째인덱스 수]+5[1번째 인덱스수]=result" 이렇게일때 2번째 인덱스에 20이 온다면, 
          //result 값에 단순히 2번째 인덱스 수에서 1번째 인덱스 수를 뺀값을 더해준다면, 1번째 인덱스 수는 2번 계산된셈이다. 따라서 일단 빼주고
          //새로 계산한 수를 더해주는 것
        } else {
          result = result + DIGIT_VALUES[romanNumeral[i+1]];
        }
      }
    return result;
    } else {
      return 0;
    }
  } else {
    return null;
  }
};
profile
코드 한 줄로, 세상의 가치를 만들자🌟

0개의 댓글