본문 바로가기

백준/실버

[백준 1755번] 숫자놀이 (C++)

문제링크 : 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>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = INT_MAX;

int N, M;
string s, arr[11] = { "zero" ,"one" ,"two" ,"three" ,"four" ,"five" ,"six" ,"seven" ,"eight" ,"nine" };
map<string, int>m; //Key 기준 오름차순 정렬

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);

    cin >> N >> M;

    for(int i=N; i<=M; i++)
    {
        if(i>9)
        {
            s = arr[i/10] + " " + arr[i%10]; //2글자
            m[s] = i;
        }
        else
        {
            s = arr[i%10]; //1글자
            m[s]=i;
        }
    }

    int cnt = 0;
    for(auto i : m)
    {
        cout << i.second << " ";
        if(cnt%10==9) cout << "\n";
        cnt++;
    }

    return 0;
}

 

먼저 0~9까지에 대해 문자열로 선언된 배열을 만들어준다.

이를 기준으로 입력받은 범위 내에 속한 숫자를 2글자인 경우와 1글자인 경우를 주의하여 문자열로 바꿔준다.

이후 해당 문자열 Key로 현재 i 값을 Value로 삼아준다.

 

map의 경우 Key를 기준으로 오름차순 정렬하기에, 문제에서 원하는 문자열 기준 사전 순으로 정렬하게 된다.

따라서 현재 map에 담긴 Value들을 순서대로 출력하되, 10번째 마다 줄바꿈을 해서 출력해주면 된다.