본문 바로가기

Problem Solving/백준

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


#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
#include <numeric>
#include <math.h>
#include <algorithm>
#include <functional>
using namespace std;

string arr[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

bool compare(const string& a, const string& b) {
    for(int i = 0; i < min(a.length(), b.length()); i++) {
        if(a[i] == b[i]) continue;
        return arr[a[i] - '0'] < arr[b[i] - '0'];
    }
}

int main() {
    int N, M;
    cin >> N >> M;
    vector<string> arr;
    
    for(int i = N; i <= M; i++)
        arr.push_back(to_string(i));

    sort(arr.begin(), arr.end(), compare);

    for(int i = 0; i < arr.size(); i++) {
        cout << arr[i];
        (i + 1) % 10 == 0 ? cout << "\n" : cout << " ";
    }
}

숫자를 문자로 받아서 그 문자끼리 비교하는 것이 아니라 compare 함수에서 전역변수로 지정한 알파벳 문자열 배열을 비교하도록 하여 모든 문자를 비교하도록 하였습니다.


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

 

1755번: 숫자놀이

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

www.acmicpc.net