본문 바로가기

백준/C++

[C++] 백준 16496번 - 큰 수 만들기

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