[프로그래머스] 가장 큰 수

Zero·2022년 3월 21일
0

Algorithm

목록 보기
3/3

코드

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

bool cmp (int num1 , int num2){
    string str1 = to_string(num1);
    string str2 = to_string(num2);
    
    if(stoi(str1+str2) > stoi(str2+str1))
    {
        return true;
    }
    else return false;
    
}

string solution(vector<int> numbers) {
    string answer = "";
    
    if(numbers.size() == 1)
        return answer += to_string(numbers[0]);
    sort(numbers.begin(), numbers.end(), cmp);
    if(numbers[0] == 0) return answer+=to_string(0);    
    for(int i=0; i<numbers.size(); i++)
    {
        answer += to_string(numbers[i]);
    }
    
    return answer;
}

풀이

numbers 내에 존재하는 숫자를 정렬하여 조합하면서 최대의 수를 찾아야 했다. 처음엔 무작정 모든 정렬 경우의 수를 생각하게 되었고, 아무리 생각해도 이 방법은 아닌 거 같았다. sort 함수를 통해 비교 정렬을 하기로 생각하였고, 가장 큰 수를 찾기 위한 조건은

  • 맨 앞자리 숫자가 큰 수가 앞에 와야한다
  • 비교하는 두 수의 길이가 같고 앞자리가 같다면 뒷자리 수로 비교한다.
  • 1번째 숫자 + 2번째 숫자와 2번째 숫자 + 1번째 숫자를 비교하여 큰 수를 리턴
    -> 이 때, +는 더하기가 아닌 문자열로 합치기를 의미 !

결국 이를 통해 정렬된 수를 answer 문자열에 합쳐 리턴해준다.

0개의 댓글