GitHubSeob

C++ / 백준 / 16496 / 큰 수 만들기 본문

Baekjoon/Platinum

C++ / 백준 / 16496 / 큰 수 만들기

GitHubSeob 2021. 9. 17.

문제

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

 

16496번: 큰 수 만들기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 리스트에 포함된 수가 주어진다. 수는 공백으로 구분되어져 있고, 1,000,000,000보다 작거나 같은 음이 아닌 정수 이다. 0을 제외한 나

www.acmicpc.net

문제풀이

Compare함수를 만들어 조건대로 정렬하게 했다.

0을 제외한 나머지 수는 0으로 시작하지 않으며, 0이 주어지는 경우 0 하나가 주어진다.

라는 문장인데 0이 딱 한번만 주어진다는것으로 이해했다.

하지만 0이 여러개 주어질수도 있다.0이 여러개면 0만 출력하고 끝나야하지만 문제를 잘못 이해해 0의 개수만큼 0을 출력했었다.그걸 고치고 나니까 바로 맞았다.sort를 이용하여 정렬시 bool Compare함수의 조건을 걸어두었다.s1+s2의 값과 s2+s1값 중 더 큰 값으로 정렬이 되게 하였다.

 

 

코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool Compare(string s1, string s2) {
    return s1 + s2 > s2 + s1;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int N = 0;
    cin >> N;
    vector<string>Arr(N,"");
    int idx = 0;

    for (idx = 0; idx < N; ++idx)
        cin >> Arr[idx];

    sort(Arr.begin(), Arr.end(), Compare);
    if (Arr[0] == "0") cout << "0";
    else
        for (idx = 0; idx < Arr.size(); ++idx)
            cout << Arr[idx];
}