Notice
250x250
Recent Posts
Recent Comments
Link
넘치게 채우기
[LeetCode] 273. Integer to English Words 본문
728x90
반응형
leetcode - Integer to English Words
문제 유형 : 문자열 처리
문제 난이도 : Hard
문제
Convert a non-negative integer num to its English words representation.
음수가 아닌 정수 num을 영어 단어 표현으로 변환하여라.
풀이
num의 각 자릿수들을 저장하기 위해, 10짜리 크기의 배열을 만들어서 저장한다.
일의자릿수부터 잘라 넣어서, 역순으로 저장시켰다.
예제를 보다보면, 규칙을 알 수 있다.
바로, 세 자리 씩 끊어서 변환되어서 적절한 접미사 수식어를 붙이면 된다는 것이다.
그래서, 세 자리씩 변환한 문자열들에 "Thousand"와 같은 수식어를 붙인 것들을 각각 접합하면 된다.
세 자리 단위를 처리할 때, 십의 자리는 특이 케이스가 있다. eleven, twelve, -teen, -ty 등. 이를 적절히 처리해주면 된다.
코드
C++
#pragma GCC optimize("03", "unroll-loops");
static const int __ = [](){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
return 0;
}();
class Solution {
private:
vector<string> numWords = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
vector<string> teens = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
vector<string> tys = {"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
public:
string convert(int digit, vector<int>& nums) {
string res = "";
// 100
if(nums[digit+2] != 0) {
res += (numWords[nums[digit+2]] + " Hundred ");
}
// 0 ~ 99
if(nums[digit+1] == 0) {
res += numWords[nums[digit]];
if(nums[digit]) res += " ";
} else if(nums[digit+1] == 1) {
res += teens[nums[digit]];
res += " ";
} else {
res += tys[nums[digit+1]];
if(nums[digit]) {
res += " ";
res += numWords[nums[digit]];
}
res += " ";
}
return res;
}
string numberToWords(int num) {
if(num == 0) return "Zero";
vector<int> nums;
while(num > 0) {
nums.push_back(num % 10);
num /= 10;
}
while(nums.size() < 10) {
nums.push_back(0);
}
string n = convert(6, nums);
string m = convert(3, nums);
string ans = (nums[9]? numWords[nums[9]] + " Billion ":"") + (n!=""? n + "Million ":"") + (m!=""? m + "Thousand ":"") + convert(0, nums);
ans.pop_back();
return ans;
}
};
728x90
반응형
'PS > LeetCode' 카테고리의 다른 글
[LeetCode] 840. Magic Squares In Grid (0) | 2024.08.09 |
---|---|
[LeetCode] 885. Spiral Matrix III (0) | 2024.08.08 |
[LeetCode] 3016. Minimum Number of Pushes to Type Word II (0) | 2024.08.06 |
[LeetCode] 2053. Kth Distinct String in an Array (0) | 2024.08.05 |
[LeetCode] 1508. Range Sum of Sorted Subarray Sums (0) | 2024.08.04 |