문제 :
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항 :
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입출력 예 :
numbers | return |
[6,10,2] | "6210" |
[3,30,34,5,9] | "9534330" |
코드 :
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(const string &s1,const string &s2){
return s1+s2>s2+s1;
}
string solution(vector<int> numbers) {
string answer = "";
vector<string> sorted;
if(*max_element(numbers.begin(),numbers.end())==0) return "0";
for(int i=0;i<numbers.size();i++)
sorted.push_back(to_string(numbers[i]));
sort(sorted.begin(),sorted.end(),compare);
for(int i=0;i<sorted.size();i++)
answer+=sorted[i];
return answer;
}
다시 한번 짚고 넘어가기 :
-테스트 케이스 [0,0,0,0]일 때 output이 0인 경우는 고려안해서 마지막 테스트 케이스를 실패하였다.
그래서 최댓값이 0이면 바로 "0"을 반환할 수 있도록 코드를 작성하였다.
-처음에 compare함수의 매개변수를 string s1으로 선언하였는데 const string &s1로 넘겨주면 copy construct 하지 않아서 메모리 효율적이기 때문에 수정했다.
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스/level2/c++] 소수 찾기 (0) | 2021.01.26 |
---|---|
[프로그래머스/level2/c++] 더 맵게 (0) | 2021.01.25 |
[프로그래머스/level2/c++] 가장 큰 정사각형 찾기 (0) | 2021.01.24 |
[프로그래머스/level2/c++] 프린터 - "스택/큐" (0) | 2021.01.24 |
[프로그래머스/level2/c++] 주식 가격 - "스택/큐" (0) | 2021.01.24 |