728x90
https://www.acmicpc.net/problem/1755
1755번: 숫자놀이
79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로
www.acmicpc.net
벡터를 사용해서 문제를 풀었다.
범위 내의 수를 문자열로 바꾸고(to_string(i)) 각 자릿수를 돌면서 맞는 문자열을 추가해주고 pair로 <숫자를 문자열로 바꾼 값(String), 숫자 문자열(String)> 을 쌍으로 벡터에 넣었다. 바뀐 문자열을 기준으로 정렬하고 10개씩 출력해줬다.
//1755번: 숫자놀이
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
int m, n, cnt = 0;
vector<pair<string, string>> v;
string str="";
void solution(string num){
for(int i=0; i<num.size(); i++){
switch (num[i]) {
case '0' : str += "zero "; break;
case '1' : str += "one "; break;
case '2' : str += "two "; break;
case '3' : str += "three "; break;
case '4' : str += "four "; break;
case '5' : str += "five "; break;
case '6' : str += "six "; break;
case '7' : str += "seven "; break;
case '8' : str += "eight "; break;
case '9' : str += "nine "; break;
default : break;
}
}
v.push_back(make_pair(str, num));
str = "";
}
bool compare(const pair<string, string> p1, const pair<string, string> p2){
return p1.first < p2.first;
}
int main() {
ios::sync_with_stdio(0); cout.tie(0); cin.tie(0);
cin >> m >> n;
for(int i = m; i <= n; i++) solution(to_string(i));
sort(v.begin(), v.end(), compare);
for(auto it = v.begin(); it != v.end(); it++){
if(cnt == 10) {
cout << '\n';
cnt = 0;
}
cnt++;
cout << it->second << ' ';
}
cout << '\n';
return 0;
}
💡공부 및 기록용 블로그이므로 오류가 있을 수 있습니다.💡
만약 문제에 오류나 오타가 있다면 댓글로 알려주세요➿
언제나 환영합니다. 감사합니다. 화이팅!
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[c++] 1806번: 부분합 (0) | 2022.01.15 |
---|---|
[c++] 5800번: 성적 통계 (0) | 2022.01.14 |
[c++] 5635번: 생일 (0) | 2022.01.14 |
[c++] 1940번: 주몽 (0) | 2022.01.14 |
[c++] 17266번: 어두운 굴다리 (0) | 2022.01.13 |