본문 바로가기

Algorithm/String

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

반응형

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

 

1755번: 숫자놀이

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

www.acmicpc.net

문자열과 정렬문제였습니다.

 

 

📕 풀이방법

📔 입력 및 초기화

 m, n을 입력받습니다. 숫자를 문자열로 변환시킨 값을 key, 숫자를 value로 한 map 변수 numMap을 선언합니다.

 

📔 풀이과정

 i는 m ~ n까지 loop를 돌며 1씩 증가합니다. 한 자리 수일 때 i를 문자열로 변환시켜 map에 넣습니다. 두 자리 수일 때 i / 10 과 i % 10을 문자열로 변환시킨 값을 map에 넣습니다.

 

📔 정답출력

 map에 삽입시 자동정렬되므로 10단위씩 개행으로 끊고 답을 출력해줍니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
int m, n;
map <string,int> numMap;
string getString(int num){
    if(num == 0) return "zero";
    if(num == 1) return "one";
    if(num == 2) return "two";
    if(num == 3) return "three";
    if(num == 4) return "four";
    if(num == 5) return "five";
    if(num == 6) return "six";
    if(num == 7) return "seven";
    if(num == 8) return "eight";
    if(num == 9) return "nine";
}

int main(){
    cin >> m >> n;
    for(int i = m; i <= n; i++){
        string s;
        if(i >= 10) s = getString(i / 10) + getString(i % 10);
        else s = getString(i);
        numMap[s] = i;
    }
    int cnt = 0;
    for(auto el : numMap){
        cout << el.second << ' ', cnt++;
        if(cnt % 10 == 0) cout << '\n';
    }
}