*제출 코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool comp(int x, int y){
string xplusy = to_string(x) + to_string(y);
string yplusx = to_string(y) + to_string(x);
return xplusy > yplusx;
}
string solution(vector<int> numbers) {
string answer = "";
sort(numbers.begin(), numbers.end(), comp);
bool allZero = true;
for(int i=0; i<numbers.size(); i++){
if (numbers[i] != 0)
allZero = false;
answer += to_string(numbers[i]);
}
return (allZero)? "0" : answer;
}
*review
각 원소를 string으로 놓고 string조합 중에서 가장 큰 수가 나오는 string을 선택한다.
1.단순히 벡터 원소를 모두 string으로 바꿔서 정렬한다면?
"3","30"의 경우 "330"이 올바른 답이지만 "30">"3" 이므로 "303"이라는 답이 나온다.
2.정렬 기준을 바꾸자
"3","30"이 있을때 "3"+"30" 이 큰지 "30"+"3"이 큰지 비교해서
큰 수를 만드는 원소가 앞으로 가도록 하는 comp함수를 작성한다.
x= "3"이고 y="30"일 때 xplusy가 yplusx 보다 더 크므로 원소위치를 바꿀 필요가 없는 true를 반환한다.
(true를 return하면 교환하지 않는다.)
'Algorithm > Programmers' 카테고리의 다른 글
| [프로그래머스] 전화번호 목록 (0) | 2020.03.24 |
|---|---|
| [프로그래머스] - 타겟넘버 (0) | 2020.03.18 |
| [프로그래머스] 이분탐색 - 예산 (0) | 2020.03.04 |
| [프로그래머스] 정렬 -k번째 수 (0) | 2020.02.05 |