본문 바로가기

Algorithm/Programmers

[프로그래머스] 가장 큰 수

*제출 코드

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

bool comp(int x, int y){
    string xplusy = to_string(x) + to_string(y);
    string yplusx = to_string(y) + to_string(x);
    return xplusy > yplusx;
}

string solution(vector<int> numbers) {
    string answer = "";
    sort(numbers.begin(), numbers.end(), comp);
    bool allZero = true;
    for(int i=0; i<numbers.size(); i++){
        if (numbers[i] != 0) 
            allZero = false;
        answer += to_string(numbers[i]);
    }
    
    return (allZero)? "0" : answer;
}

 

*review

각 원소를 string으로 놓고 string조합 중에서 가장 큰 수가 나오는 string을 선택한다.

 

1.단순히 벡터 원소를 모두 string으로 바꿔서 정렬한다면? 

    "3","30"의 경우 "330"이 올바른 답이지만  "30">"3" 이므로 "303"이라는 답이 나온다.

 

2.정렬 기준을 바꾸자

    "3","30"이 있을때 "3"+"30" 이 큰지 "30"+"3"이 큰지 비교해서

    큰 수를 만드는 원소가 앞으로 가도록 하는 comp함수를 작성한다.

    x= "3"이고 y="30"일 때 xplusy가 yplusx 보다 더 크므로 원소위치를 바꿀 필요가 없는 true를 반환한다.

    (true를 return하면 교환하지 않는다.)