본문 바로가기

백준 문제풀이/String

[C++] 백준 문제풀이 (String) 1755번 숫자놀이

 

 

 

https://www.acmicpc.net/problem/1755

 

1755번: 숫자놀이

79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로

www.acmicpc.net

 

 

#include <bits/stdc++.h>


int main(){
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);

    std::unordered_map<int, std::string> numToStr;
    std::unordered_map<std::string, int> strToNum;
    std::string numStr[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

    for (int i = 0; i < 10; ++i){
        numToStr[i] = numStr[i];
        strToNum[numStr[i]] = i;
    }

    std::vector<std::string> answers;
    int m, n;
    std::cin >> m >> n;

    for (int i = m; i <= n; ++i){
        std::string s = "";
        if (i / 10 != 0){
            s += numToStr[i / 10];
            s += " ";
        }
        s += numToStr[i % 10];
        answers.emplace_back(s);
    }

    std::sort(answers.begin(), answers.end());
    int cnt = 0;
    for (std::string str : answers){
        // stream객체는 일회용
        std::stringstream ss;
        ss.str(str);
        std::string s;
        int number = 0;
        while(ss >> s){
            number = number * 10 + strToNum[s];
        }
        std::cout << number << " ";
        if (cnt % 10 == 9){
            std::cout << "\n";
        }
        ++cnt;
    }
    return 0;
}