320x100
출처: https://leetcode.com/problems/integer-to-roman/
입력된 정수를 로마표기법으로 변환하는 문제였다.
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 |