문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 return
https://school.programmers.co.kr/learn/courses/30/lessons/42746
문제 풀이법
algorithm 헤더에 있는 sort 함수를 커스텀하면 된다
sort에 들어가는 cmp 함수에서 잘 비교하면되는데, 처음에는 string 끼리 비교가 되는지 모르고 무조건 int형으로 받아서 비교하려고 했었다
그러다보니 생긴 문제점이 3과 400을 비교할 때의 문제점이었는데, 계속해서 10을 나눠주면서 앞에 있는 수를 비교해주려고 하니 너무 복잡해졌다
하지만 여러 블로그들을 보면서 string 끼리 비교가 되는 데, 비교를 할 때 그냥 a와 b를 비교해버리면 3과 30이 나왔을 때, 330이 더 크지만 303으로 처리를 해버려서 틀리게 된다
따라서 비교 시, a와 b를 합쳐보면서 비교해야 한다
즉, 3과 30이 나왔을때 303이 큰지, 330이 큰지 비교한다는 뜻이다
마지막으로 numbers에 0만 있으면 0이 여러개 정렬되서 return 되므로 따로 처리를 해주어야 한다
소스 코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(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(), cmp);
if (v[0] == "0")
return "0";
for (int i = 0; i < numbers.size(); i++) {
answer += v[i];
}
return answer;
}
'Algorithm Study' 카테고리의 다른 글
[백준] 4485 녹색 옷 입은 애가 젤다지? (0) | 2024.02.15 |
---|---|
[프로그래머스] 2단계 - 완주하지 못한 선수 (0) | 2024.02.15 |
[프로그래머스] 2단계 - 피로도 (0) | 2024.02.06 |
[프로그래머스] 2단계 - 기능개발 (0) | 2024.02.06 |
[프로그래머스] 2단계 - 전화번호 목록 (0) | 2024.02.03 |