풀이 과정
이 문제는 int로 주어진 벡터를 string으로 바꿔줘서 정렬을 해주는 것이 중요하다.
문자열을 이어붙였을 때, a + b > b + a로 내림차순 정렬을 해준다.
저 조건을 걸지 않는다면, 9 5 34 30 3 순으로 정렬되기 때문에
9534303이 나와 가장 큰 수가 아니게 된다. 9 5 34 3 30 순으로 정렬되게
하기 위해서 330 > 303 조건을 걸어줘야 한다.
그리고 히든 케이스 중에 하나인 0으로 시작하는 문자열일 경우는 0으로 예외처리를 해준다.
#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);
for(int i = 0; i < v.size(); i++){
answer += v[i];
}
if(answer[0] == '0') return "0";
return answer;
}
'🍞 Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스][Level2] 소수 찾기 c++ (0) | 2022.10.21 |
---|---|
[프로그래머스][Level2] 구명보트 c++ (0) | 2022.10.21 |
[프로그래머스][Level2] [1차] 뉴스 클러스터링 c++ (0) | 2022.10.21 |
[프로그래머스][Level2] H-Index c++ (0) | 2022.10.21 |
[프로그래머스][Level2] 프로세스 c++ (0) | 2022.10.21 |