[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/42746
[풀이]
단순하게 모든 조합을 만들어서 풀 수는 없다(시간 초과 발생). 그렇다고 오름차순 정렬로만은 문제를 풀 수 없는데, 예를 들어 6과 10 두 가지 숫자만 입력됐다고 생각해보자.
- 6과 10으로 만들 수 있는 조합 : 610, 106
당연히 6이 먼저 온 다음, 10이 다음으로 와야 610로 가장 큰 수가 된다. 이를 위해 sort 방식을 만들어줘야하는데, 정말 간단하게 만들 수 있다. 두 값을 인자로 받았을 때, 이걸 string으로 변환하고 바로 비교하면 된다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool Compare(int _Left, int _Right)
{
string L = to_string(_Left);
string R = to_string(_Right);
return L + R > R + L;
}
string solution(vector<int> numbers)
{
string answer = "";
// 숫자 비교한 뒤, 앞자리가 가장 큰 것을 기준으로 정렬하고 string으로 조합해서 리턴
// 10 6이 있을 때, 106보단 610이 크다, 1의 자리를 비교해야함
sort(numbers.begin(), numbers.end(), Compare);
for (int i = 0; i < numbers.size(); i++)
{
answer += to_string(numbers[i]);
}
if (answer[0] == '0') return "0";
return answer;
}'알고리즘 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스 Lv.2] 두 큐 합 같게 만들기 (0) | 2025.05.19 |
|---|---|
| [프로그래머스 Lv.2] 소수 찾기 (0) | 2025.05.18 |
| [프로그래머스 Lv.2] 2개 이하로 다른 비트 (0) | 2025.05.18 |
| [프로그래머스 Lv.2] [1차] 프렌즈4블록 (0) | 2025.05.16 |
| [프로그래머스 Lv.2] 오픈채팅방 (0) | 2025.05.16 |