코딩테스트 준비/leetcode

12. Integer to Roman [Medium]

MAKGA 2021. 6. 14. 17:03
320x100

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

 

Integer to Roman - 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

 

입력된 정수를 로마표기법으로 변환하는 문제였다.

1~3까지는 1의 개수로 표현

4는 1과 5로 표현

5는 5

6~8까지는 5와 1의 개수로 표현

9는 1과 10으로 표현

 

어차피 단위별 문자가 정해져있으니 맨 앞의 지수(?)와 자릿수를 가지고 문자를 판별해서 스트링을 합쳐주는 방식으로 해결했다.

source
class Solution {
public:
        vector<vector<string>> vec = { { "I", "V"}, {"X", "L"}, {"C", "D"}, {"M"} };

    /*
        digit : 자릿수
    */
    string RomanRole(int digit, int num)
    {
        string ret;
        // 1 ~ 3까지는 반복문으로 할까하다가 규칙은 변하지 않으니 조금이라도 빠른 방법으로..
        switch (num)
        {
        case 3:
            ret += vec[digit][0];
        case 2:
            ret += vec[digit][0];
        case 1:
            ret += vec[digit][0];
            break;
        case 4:
            ret += vec[digit][0];
            ret += vec[digit][1];
            break;
        case 5:
            ret += vec[digit][1];
            break;
        case 6:
            ret += vec[digit][1];
            ret += vec[digit][0];
            break;
        case 7:
            ret += vec[digit][1];
            ret += vec[digit][0];
            ret += vec[digit][0];
            break;
        case 8:
            ret += vec[digit][1];
            ret += vec[digit][0];
            ret += vec[digit][0];
            ret += vec[digit][0];
            break;
        case 9:
            ret += vec[digit][0];
            ret += vec[digit+1][0];
            break;
        }
        return ret;
    }

    string intToRoman(int num) {
        vector<string> vec;
        string ret;
        int digit = 1;
        while (num > 0)
        {
            vec.emplace_back(RomanRole(digit - 1, num % 10));
            ++digit;
            num /= 10;
        }

        while (!vec.empty())
        {
            ret += vec.back();
            vec.pop_back();
        }

        return ret;
    }
};

 

 

근데 남의 풀이 보다보니 다들 쉽게했네;;

미리 모든 경우의 문자열을 배열에 두고 그냥 함;;;;

320x100

'코딩테스트 준비 > leetcode' 카테고리의 다른 글

100. Same Tree [Easy]  (0) 2021.06.16
7. Reverse Integer [Easy]  (0) 2021.06.14
113. Path Sum II [Medium]  (0) 2021.06.14
1775. Equal Sum Arrays With Minimum Number of Operations [Medium]  (0) 2021.06.14
36. Valid Sudoku [Medium]  (0) 2021.06.13