쾌락없는 책임 (공부)/알고리즘 문제풀이

프로그래머스 Level 2 - 가장 큰 수 C++

허스크 2021. 4. 10. 10:44
반응형
 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

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

bool compare(string a, string b){
    return a+b > b+a;
}
string solution(vector<int> numbers) {
    string answer = "";
    vector<string> v;
    
    for(int i = 0; i < numbers.size(); i++)
        v.push_back(to_string(numbers[i]));
    
    sort(v.begin(), v.end(), compare);
    
    if(v.at(0) == "0")
        return "0";
    
    for(int i = 0; i < v.size(); i++)
        answer += v[i];
                    
    return answer;
}

 숫자를 문자열로 변경한 후 더하기를 해야 자리수를 고려하지 않고 비교를 할 수 있는 문제였습니다. 때문에 기존 배열은 int라서 string배열을 만든 뒤 넣어주는 작업을 했으며 algorithm 헤더에 있는 sort함수를 커스텀해서 compare로 문자열 더한 값중 큰 수가 앞에 오게 했습니다. 위 compare를 거치고 나면 앞자리가 큰 수가 앞에 오게 됩니다.

 

 처음 2번은 11번을 계속 틀렸는데 다시 보니 solution이 string타입인데 return 0를 해서 그랬습니다.

  - return = "0"로 변경하니 맞았습니다.


 추가로 위 compare함수에서 단순 string a가 아니라 const string &a 이런 식으로 하면 copy construct되지 않아서 메모리를 효율적으로 쓴다는 이야기가 있습니다!

반응형