프로그래머스/Level_2

[Level 2] 가장 큰 수 (C++)

배발자 2022. 1. 17.
반응형
 

<sort> 오름차순, 내림차순으로 정렬하자

sort() 함수는 algorithm 헤더에 포함되어 있다. 대부분 코딩테스트에서 웬만해선 처음부터 끝까지 정렬을 한 후 문제를 풀게끔 되어 있는 경우가 많다. 이럴때 sort() 함수가 매우 유용하다. 벡터, 문

baebalja.tistory.com


사용자 정의에 의한 정렬을 하여 이 문제를 풀면된다.

즉, cmp() 함수를 생성하여 sort()의 세번째 인자 값으로 넣으면, bool 함수의 반환 값에 의해서 정렬이 동작한다. 
number값을 to_string 함수를 통해서 문자열로 처리한 후 compare()함수에서 문자열 a와 b를 합치는데 이때 a+b를 연결한것과 b+a를 연결한 것중에 더 큰 값을 앞에다가 정렬 하겠다는 의미이다. 

 

 

6과 10을 한번 보자 

해당 값을 문자열로 처리한후 "610" 과 "106" 값으로 만든 후 더 큰 값을 앞에다가 정렬한다는 의미이다. 

그러면 6 10 이 정렬이 되고 다음 "102" 와 "210" 을 비교해서 더 큰 값을 앞에다가 정렬하면 2 10이 된다. 이런식으로 모든 값을 정렬하게 되면 6 10 2 순으로 정렬되게 된다. 

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

bool cmp(string s1, string s2){
    return s1+s2 > s2+s1; 
}
string solution(vector<int> numbers) {
    vector <string> v; 
    for(int i=0; i<numbers.size() ;i++){
        string s= to_string(numbers[i]); 
        v.push_back(s);
    }
    sort(v.begin(),v.end(),cmp);
    string answer="";
    for(string s : v){
        answer+=s;     
    }
    if(answer[0]=='0')return "0"; 
    return answer; 
}

 

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

 

반응형

댓글