문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
-> 여러가지 방법이 있다.
각 문자열을 더해줘서 숫자들을 비교하고, 리턴해준다.
내가 풀었을 때는, 각 문자열의 크기를 먼저 비교하는 데, 이때 조건을 추가 해주었다. 전체 배열 중 가장 자릿수가 큰수를 찾아 모든 문자열을 해당 자릿수로 만들었을 때, 비교를 하여 내림차순 해준다. 만약 숫자가 같을 경우 자릿수가 작은 것이 더크다고 생각한다. 자릿수도 같은 경우 다음으로 넘어간다.
이런식으로 풀었는 데, 해당코드의 분실로 가져오지 못했다..ㅠㅠ
#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) {
vector<string> vt;
for(int i=0; i<numbers.size();i++){
vt.push_back(to_string(numbers[i]));
}
string answer = "";
sort(vt.begin(),vt.end(),cmp);
if(vt[0].compare("0")==0)
return "0";
for(int i=0; i<vt.size();i++){
answer+=vt[i];
}
return answer;
}
모범답안. 주어진 배열을 문자열로 변환 -> 문저열을 현재번째와 그다음 번째의 조합이 더큰경우를 찾는 조건으로 정렬 -> 정렬 했을 때, 0이 나온경우 0반환.
'Programming > 자료구조, 알고리즘' 카테고리의 다른 글
C++ - h-index_프로그래머스 고득점 키트 (0) | 2022.09.11 |
---|---|
C++ - k번째 수_프로그래머스 고득점 키트 (0) | 2022.09.11 |
스택 계산기 (1) | 2022.06.19 |