본문 바로가기
프로그래머스 코딩테스트/Level 2

프로그래머스) 가장 큰 수 (C++)

by xortl98 2022. 5. 4.
728x90

 출처 

https://programmers.co.kr/learn/courses/30/lessons/42746#

 

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

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

programmers.co.kr

 내 풀이 

#include <string>
#include <vector>
#include<algorithm>

using namespace std;
// ex) 3,30 -> 330 > 303 이런식으로 비교
bool compare(string a, string b)
{
	return a+b>b+a;
}

vector<string>v;
string answer = "";

string solution(vector<int> numbers) {
    
    for(int i=0;i<numbers.size();i++)
    {
        string input = to_string(numbers[i]);
        v.push_back(input);
    }
    
    sort(v.begin(),v.end(),compare);
    
    //만약 000 이면 정답이 0이 되어야함 
    if(v[0] == "0") return "0";
    
    for(int i=0;i<v.size();i++)
    {
        answer+=v[i];
    }
    
    return answer;
}

 해설

3과 30의 숫자를 비교하기 위해서 a+b b+a로 비교 후 내림 차순(>)으로 정렬해주었다.

ex) 330 > 303 

 느낀점 

더보기

3일 동안 이 문제를 해결하기 위해서 사경을 헤맸다. (하루 2시간 정도씩)

테스트 1~6가 풀리지 않았기 때문이다.

도저히 풀릴것 같지 않아 결국 판도라의 상자를 열어보았다.

그리고 단 한줄의 코드로 문제가 해결된다는걸 깨닫는 순간 뭔가 너무 복잡한 마음이 들었다.

아직 갈길이 먼가보다. 노력에 노력을 더 해야겠다.