[Programmers 알고리즘, C++]#Level2_가장 큰 수
Programmers 알고리즘 문제 풀이, Level2_가장 큰 수
C++의 algorithm 라이브러리에서 제공하는 sort 함수와 람다 표현식을 활용하는 문제
Overview
- 문제
- 풀이
- 코드
#1, 문제
#2. 풀이
1. sort()
- [정의] : C++의 algorithm 헤더에서 제공하는 sort() 알고리즘은 퀵 정렬을 기준으로 원본 컨테이너의 정렬을 수행하는 알고리즘입니다. sort() 알고리즘은 별도의 Predicate 함수가 없을 시, 오름차순(less) 정렬을 수행합니다.
2. 람다 함수
- [개념] : C++의 람다 표현식은 익명의 함수 객체를 인라인으로 정의할 수 있도록 해주는 기능입니다.
- [특징] : 일반적으로, sort() 알고리즘과 같이 STL 알고리즘 중 별도의 사용자 정의 Predicate 함수를 인자로 전달받는 함수들에서 주로 활용됩니다.
3. sort() + 람다
- 먼저, 주어진 vector 컨테이너의 각 항목들을 stringstream 객체를 활용하여 문자열로 변환합니다.
- 다음으로, sort() 알고리즘과 람다 표현식을 활용해 서로 앞 뒤로 이어붙여 더 큰 수를 만들어내는 기준으로 정렬해 줍니다.
#3. 풀이
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
string solution(vector<int> numbers) {
string answer = "";
// #1. 문자열로 변환
vector<string> v;
for(int i=0; i<(int)numbers.size(); i++)
{
stringstream ss;
ss << numbers[i];
v.push_back(ss.str());
}
// #2. 정렬, 자릿수 별로 차례대로 비교하고, 특정 자릿수가 더 큰 문자열을 높은 우선순위로 정렬
sort(begin(v), end(v), [](const string& a, const string& b)
{
return a+b > b+a;
});
// #3. 결과 값 저장
for(int i=0; i<(int)v.size(); i++)
{
answer += v[i];
}
if(answer[0] == '0')
return "0";
return answer;
}
'문제 풀이 > Programmers 문제 풀이' 카테고리의 다른 글
[Programmers_C++]#Level2_예상 대진표 (0) | 2023.12.13 |
---|---|
[Programmers_C++]#Level2_구명보트, 투 포인터 알고리즘 (0) | 2023.12.13 |
[Programmers]#Level1_배열의 원소 삭제하기, remove_if(), find(), erase() (2) | 2023.11.23 |
[Programmers]#Level1_체육복, map, prev(), next() (0) | 2023.11.23 |
[Programmers]#Level2_모음 사전, 완전 탐색, DFS(깊이 우선 탐색) (1) | 2023.11.23 |