ice rabbit programming

[LeetCode] 13. Roman to Integer 본문

PS/LeetCode

[LeetCode] 13. Roman to Integer

판교토끼 2020. 4. 11. 15:39

https://leetcode.com/problems/roman-to-integer/

 

Roman to Integer - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

간만에 PS를 하나 풀었다. 원래는 BOJ(백준 온라인 저지)를 많이 풀었는데 요즘 친구들이 리트코드를 많이 풀길래 easy 한 문제를 골라서 풀어 보았다.

 

easy인 만큼 별로 어려운 문제는 아니었다. 로마기호를 10진수로 변환하는 문제였다.

 

문제에서 4, 9, 40, 90 등 어떻게 처리해야되는지 힌트를 많이 주었다.

 

단순하게 가장 끝자리부터 더해가는 식으로 계산했고, 앞자리 수가 빼야할 수면 따로 빼 주었다. 간단하게 5분 정도만에 풀었다.

 

class Solution {
public:
    int romanToInt(string s) {
        int result = 0;
        for (int i = s.length(); i >= 0; i--) {
            char temp = s[i];
            switch(temp) {
            case 'I':
                result += 1;
                break;
            case 'V':
                if (i > 0 && s[i - 1] == 'I') {
                    result += 4;
                    i--;
                }
                else
                    result += 5;
                break;
            case 'X':
                if (i > 0 && s[i - 1] == 'I') {
                    result += 9;
                    i--;
                }
                else
                    result += 10;
                break;
            case 'L':
                if (i > 0 && s[i - 1] == 'X') {
                    result += 40;
                    i--;
                }
                else
                    result += 50;
                break;
            case 'C':
                if (i > 0 && s[i - 1] == 'X') {
                    result += 90;
                    i--;
                }
                else
                    result += 100;
                break;
            case 'D':
                if (i > 0 && s[i - 1] == 'C') {
                    result += 400;
                    i--;
                }
                else
                    result += 500;
                break;
            case 'M':
                if (i > 0 && s[i - 1] == 'C') {
                    result += 900;
                    i--;
                }
                else
                    result += 1000;
                break;
            }
        }
        return result;
    }
    
};

 

switch-case문을 사용했다 보니 케이스가 많아서 좀 코드가 길어진 감이 있는데, 딱히 쇼트코드가 떠오르지 않았다.

 

'PS > LeetCode' 카테고리의 다른 글

[LeetCode] Remove Element  (0) 2020.04.15
[LeetCode] Remove Duplicates From Sorted Array  (0) 2020.04.15
[LeetCode] 9. Palindrome Number  (0) 2020.04.12
[LeetCode] 7. Reverse Integer  (0) 2020.04.12
[LeetCode] 21. Merge Two Sorted Lists  (0) 2020.04.12