728x90
문제 16496번
https://www.acmicpc.net/problem/16496
문제를 풀다가 이런 식의 문제가 없을까해서 찾아보니 '큰 수 만들기'라는 문제가 있었다.
한자리수면 그냥 비교하면 되지만 한자리를 넘어가면 맨 앞부터 차례로 비교해줘야 한다. 그러기 위해서 string으로 입력을 받았다. sort를 이용하여 정렬을 하는데 합쳤을 때 더 큰 수인지 확인하는 함수를 구현한다. 정렬한 후 해당 값을 하나의 변수에 저장하고, 정렬했는데도 맨 앞이 0이면 0이 정답이기 때문에 0을 출력해준다. 그게 아니라면 그 result를 그대로 출력하면 된다.
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int N;
vector<string> num;
bool compare(string a, string b) {
return a + b > b + a;
}
int main() {
cin >> N;
for (int i = 0; i < N; i++) {
string a;
cin >> a;
num.push_back(a);
}
sort(num.begin(), num.end(), compare);
string result;
for (int i = 0; i < N; i++) {
result += num[i];
}
if (num[0] == "0") {
cout << 0;
}
else {
cout<<result;
}
return 0;
}
728x90
'백준 > C++' 카테고리의 다른 글
[C++] 백준 1357번 - 뒤집힌 덧셈 (0) | 2024.05.26 |
---|---|
[C++] 백준 1110번 - 더하기 사이클 (0) | 2024.05.26 |
[C++] 백준 1292번 - 쉽게 푸는 문제 (0) | 2024.05.24 |
[C++] 백준 2805번 - 나무 자르기 (0) | 2024.05.22 |
[C++] 백준 13241번 - 최소공배수 (0) | 2024.05.21 |