728x90
반응형
해당 문제는 주어진 숫자들을 이용해 만들 수 있는 가장 큰 수를 만드는 문제로 앞 자리가 클 수록 앞에 배치하면 되는 문제이다.
해당 부분은 복잡하게 느껴질 수 있지만, 문자열로 단순히 생각하면 쉽게 해결할 수 있다.
문자열을 정렬 시키면 가장 앞에 문자부터 비교하며 같다면 다음 문자끼리 비교하는 식으로 정렬한다. 그렇다면 숫자를 문자열로 바꾼다면 어떻게 정렬이 되겠는가
[3,30,34,5,9]를 내림차순으로 정렬시킨다면 9 5 34 30 3으로 정렬된다. 하지만 가장 큰 수를 만드려면 9 5 34 3 30 으로 정렬이 되야한다.
때문에 내림차순으로 정렬하며 커스텀 함수를 sort에 넣어줘서 3, 30을 정렬할 때 사전순으로 더 큰 수를 뽑아야한다.(ex. 303 < 330)
Sort에 대한 자세한 내용은 아래 블로그에서 확인할 수 있다.
Sort(정렬)
Sort 사용법C++에서 Sort는 배열이나 컨테이너를 정렬하는 데 사용된다.기본적으로 오름차순 정렬을 수행하며, 내림차순으로 정렬도 가능하다.또한 커스텀 함수를 넘겨주므로 정렬 기준을 사용자
jinho082008.tistory.com
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
string solution(vector<int> numbers) {
string answer = "";
vector<string> v;
//int 배열을 string 배열로 변환
for(int i : numbers)
{
//string 문자열로 만들어주는 함수
v.push_back(to_string(i));
}
//두 문자열을 더했을 때 사전 순으로 더 큰 순서대로 정렬한다. (ex. 9, 5 : 95 > 59)
sort(v.begin(), v.end(), [](string str1, string str2){
return str1 + str2 > str2 + str1;
});
//정렬한 v에 문자열을 answer에 다 넣어준다.
for(string str : v)
{
answer += str;
}
//만약 answer가 전부 0으로 이루어져있다면 00000000... 이 아닌 0을 반환한다.
if(answer == string(answer.length(), '0'))
return "0";
return answer;
}
728x90
반응형
'프로그래밍 > 코딩테스트' 카테고리의 다른 글
코딩테스트 : 큰 수 만들기 (0) | 2025.02.09 |
---|---|
코딩테스트 : 두 큐 합 같게 만들기 (0) | 2025.02.05 |
코딩테스트 : [1차] 프랜즈4블록 (0) | 2025.02.04 |
코딩테스트 : [1차] 캐시 (0) | 2025.02.04 |
코딩테스트 : 2 x n 타일링 (0) | 2025.02.04 |