Roman to Integer

Yohan Kim·2021년 8월 22일
0

solution

class Solution {
public:
    int romanToInt(string s) {
        int answer = 0;
        int signOne = 1;
        int signTen = 1;
        int signHun = 1;
        
        for(int i = s.size(); i > -1; i--){
            switch(s[i])
            {
                case 'I':
                    answer += signOne * 1;
                    break;
                case 'V':
                    answer += 5;
                    signOne = -1;
                    break;
                case 'X':
                    answer += signTen * 10;
                    signOne = -1;
                    break;
                case 'L':
                    answer += 50;
                    signTen = -1;
                    break;
                case 'C':
                    answer += signHun * 100;
                    signTen = -1;
                    break;
                case 'D':
                    answer += 500;
                    signHun = -1;
                    break;
                case 'M':
                    answer += 1000;
                    signHun = -1;
                    break;
            }
        }
        return answer;
    }
};

성능

시행오류

처음에는 0부터 시작을 해서 prev 값과 current의 값을 비교하면서 풀었는데 숫자도 복잡하고 계산도 초기값에 따라서 오류가 나서 고민하던중에
I, X, V를 빼면 나머지 문자들은 값이 정해저있고,
I, X, V는 더 큰 값이 나오면 부호가 반대로 정해진다는 것을 깨닫고
코드로 구현했다.

후기

다른 사람들의 코드를 살펴보는데 진짜 깔끔하게 잘 만든 코드들을 보았다. iterator를 돌면서 전의 값보다 큰지 작은지 비교해서 - + 를 결정하는 코드였는데, for 문을 돌면서 prev와 current를 비교할 때 항상 마지막 element가 문제가 되는데 초기 answer 를 초기화 하는 부분에서 마지막 element를 변환한 값을 넣더라 진짜 깔끔하고 쉽다라는 느낌을 들었다. 망치로 머리를 두드린 느낌이었다.

profile
안녕하세요 반가워요!

0개의 댓글