백준/실버
[백준 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번째 마다 줄바꿈을 해서 출력해주면 된다.