티스토리 뷰

백준/실버

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

게임개발기원 2024. 4. 5. 13:21

문제링크 : 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번째 마다 줄바꿈을 해서 출력해주면 된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함