#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
typedef unsigned long long ull;
bool cmp(ull a, ull b) {
return a < b;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N;
cin >> N;
vector<ull> nums;
while (N--) {
string input;
cin >> input;
string num = "";
int len = input.length();
for (int i = 0; i < len; ++i) {
if (('0' <= input[i]) && (input[i] <= '9')) {
num += input[i];
}
else {
if (num == "") continue;
nums.push_back(stoull(num));
num = "";
}
}
if (num != "") nums.push_back(stoi(num));
}
sort(nums.begin(), nums.end(), cmp);
for (int i = 0; i < nums.size(); ++i) {
cout << nums[i] << "\n";
}
return 0;
}
숫자로 이루어진 문자열 그대로 저장 & 비교해야 한다
string 간의 문자열 비교
두 문자열이 같은 경우: a.compare(b) == 0
a가 b보다 사전순으로 앞인 경우: a.compare(b) < 0
a가 b보다 사전순으로 뒤인 경우: a.compare(b) > 0
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
//문자열 오름차순 정렬
bool cmp(string a, string b) {
if (a.length() < b.length())
return true;
if (a.length() == b.length())
return a.compare(b) < 0;
return false;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N;
cin >> N;
vector<string> nums;
while (N--) {
string input;
cin >> input;
vector<string> tmp;
string num = "";
int len = input.length();
for (int i = 0; i < len; ++i) {
if (('0' <= input[i]) && (input[i] <= '9')) {
num += input[i];
}
else {
if (num == "") continue;
tmp.push_back(num);
num = "";
}
}
if (num != "") tmp.push_back(num);
//숫자 앞에 0이 있는 경우 정리
for (int i = 0; i < tmp.size(); ++i) {
string num = tmp[i];
string newNum = "";
int len = num.length();
for (int j = 0; j < len; ++j) {
if (num[j] == '0') continue;
else {
//num.substr(j): num의 인덱스 j부터 끝까지 문자열로 반환
newNum = num.substr(j);
break;
}
}
if (newNum == "") newNum = "0";
nums.push_back(newNum);
}
}
sort(nums.begin(), nums.end(), cmp);
for (int i = 0; i < nums.size(); ++i) {
cout << nums[i] << "\n";
}
return 0;
}