정수로 주어진 numbers를 string으로 변환하여 정렬하거나 각 숫자의 자리수별로 비교하여 처리해주면 된다.
나는 전자의 방법을 썼다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(string x, string y){
return x+y > y+x;
}
string solution(vector<int> numbers) {
vector<string> numbers_str;
string answer = "";
for(int i = 0; i<numbers.size(); i++){
numbers_str.push_back(to_string(numbers[i]));
}
sort(numbers_str.begin(), numbers_str.end(), compare);
if(numbers_str[0].compare("0") == 0) return "0";
for(int i = 0; i<numbers.size(); i++){
answer+= numbers_str[i];
}
return answer;
}
디버깅 기록
: compare 함수를 작성하는 데에 참 많은 애를 먹었다. string으로 변환해서 정렬하려고 한 번 마음 먹으니까 뜯어 고치고 싶지는 않고.. 어떻게 잘 생각해보면 모든 케이스를 한 번에 처리할 방법이 반드시 있을텐데 도저히 모르겠어서 자리수에 따라, 0인 경우에 따라 등등 다양한 경우로 쪼개고 쪼개다가 이렇게는 안 된다는 걸 깨달았다.
결국에는 여러 스트링을 이어서 가장 큰 수가 되도록 만들 거니까, 두 개를 이어본 다음 더 큰 결과가 만들어지는 쪽을 택하면 된다. 작지만 명확한 규칙을 찾으면 풀리는 문제.
'STUDY > 코딩테스트 연습(PS)' 카테고리의 다른 글
프로그래머스/큰 수 만들기(Greedy)/C++ (0) | 2021.04.13 |
---|---|
프로그래머스/크레인 인형뽑기 게임/2019 카카오 개발자 겨울 인턴십/C++ (0) | 2021.04.09 |
프로그래머스/더 맵게(힙 heap)/C++ (0) | 2021.04.06 |
프로그래머스/월간 코드 챌린지 시즌 1/두 개 뽑아서 더하기/C++ (0) | 2021.04.05 |
프로그래머스/주식가격(스택,큐)/C++ (0) | 2021.04.02 |