Doby's Lab

백준 1755번: 숫자놀이 (C++) 본문

PS/BOJ

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

도비(Doby) 2023. 3. 1. 11:11

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

 

1755번: 숫자놀이

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

www.acmicpc.net


Level: Silver IV

Solved By: String

 

M과 N 사이의 수들을 문자열로 변환하는 작업을 하고, 이를 정렬하여 출력해 주면 되는 문제입니다.

하지만, 이를 출력할 때는 문자열로 바뀐 숫자가 무엇이었는지 기억해야 하기에 pair<int, string>을 사용하여 second의 기준으로 정렬하고, first를 출력해 주었습니다.

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;

int M, N;
vector<pair<int, string>> v;
map<string, int> m;

bool cmp(pair<int, string> a, pair<int, string> b){
    return a.second < b.second;
}

string getNum(int n){
    if(n == 0) return "zero";
    else if(n == 1) return "one";
    else if(n == 2) return "two";
    else if(n == 3) return "three";
    else if(n == 4) return "four";
    else if(n == 5) return "five";
    else if(n == 6) return "six";
    else if(n == 7) return "seven";
    else if(n == 8) return "eight";
    else return "nine";
} 

int main(){
    cin >> M >> N;
    
    for(int i = M; i <= N; i++){
        if(i / 10){ // 10의 자리
            int a = i / 10; int b = i % 10;
            v.push_back({i, getNum(a) + ' ' + getNum(b)});
        }
        else{ // 1의 자리
            v.push_back({i, getNum(i)});
        }
    }
    
    sort(v.begin(), v.end(), cmp);
    
    int f = 1;
    for(int i = 0; i < v.size(); i++){
        cout << v[i].first << ' ';
        if(f % 10 == 0) cout << '\n';
        f++;
    }
}

 

728x90

'PS > BOJ' 카테고리의 다른 글

백준 1297번: TV 크기 (C++)  (0) 2023.05.29
백준 1051번: 숫자 정사각형 (C++)  (0) 2023.03.01
백준 1544번: 사이클 단어 (C++)  (0) 2023.03.01
백준 14397번: 해변 (C++)  (0) 2023.01.23
백준 2477번: 참외밭 (C++)  (0) 2023.01.08