Roman to Integer (LeetCode)

문제설명

  • I, V, X, L, C, D, M 까지 각각의 로마 문자에 해당하는 정수값이 있음
  • 같은 문자를 나열해 더하거나 정수값이 큰 문자 다음 작은 문자를 나열해 둘을 더함
  • 하지만 4와 9를 표현하려면 IV, IX처럼 정수값이 작은 문자가 앞에 와 두 값을 뺌
  • 입력한 문자열 s를 정수값으로 반환
  • 참고자료

제한조건

  • 문자열 s의 길이는 1이상 15이하
  • 문자열 s의 정수값 범위는 1이상 3999이하

풀이

var romanToInt = function(s) {
    const alphabet = {
        I: 1,
        V: 5,
        X: 10,
        L: 50,
        C: 100,
        D: 500,
        M: 1000
    }
    const sArr = s.split(''); // 문자 배열
    const nArr = []; // 숫자 배열
    let alphabetSum = 0; // 해당 문자의 정수값을 저장할 변수
    sArr.map((value,idx)=>{
        // 현재 문자와 다음 문자가 다를때
        if(sArr[idx] !== sArr[idx+1]){
            // 현재 문자의 숫자값이 다음문자의 숫자값보다 작을때
            if(alphabet[sArr[idx]] < alphabet[sArr[idx+1]]){
                alphabetSum += alphabet[value];
                nArr.push(alphabetSum * -1);
                alphabetSum = 0;
            }
            // 현재 문자의 숫자값이 다음문자의 숫자값보다 크거나 문자열의 마지막 문자일때
            else{
                alphabetSum += alphabet[value];
                nArr.push(alphabetSum);
                alphabetSum = 0;
            }
        }
        // 현재 문자와 다음 문자가 같을때
        else
            alphabetSum += alphabet[value];
    });
    return nArr.reduce((sum,cur)=> sum + cur,0);
};

체크포인트

  • 문자열 인덱스 범위 밖에서 요소를 찾을 경우 undefined를 반환
  • reduce 메소드로 정수합 누적 계산

좋은 웹페이지 즐겨찾기