bdfgdfg

[레벨 2] 가장 큰 수 본문

코딩테스트/프로그래머스

[레벨 2] 가장 큰 수

marmelo12 2021. 10. 17. 14:34
반응형
#include <string>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;

bool compare(string& left, string& right)
{
    string ret = left + right;
    string ret2 = right + left;
    return atoi(ret.c_str()) > atoi(ret2.c_str());
}

string solution(vector<int> numbers) {
    string answer = "";
    vector<string> cmpNum;
    for (auto num : numbers)
        cmpNum.push_back(to_string(num));
    
    sort(cmpNum.begin(), cmpNum.end(), compare);
    
    if(cmpNum[0] == "0") 
        return answer = "0";
    
    for (auto& num : cmpNum)
        answer += num;
    
    return answer;
}

처음에는 문자열 비교가아닌 정수비교를 생각하여

일의 단위 십단위 백단위등으로 나눈 후

맨 앞의 자리가 같은것끼리 나둔 후 일의 자리 > 십의 자리 > 백의 자리를 비교해 정렬하려고 했다.

ex) 9 98 -> 998.  8 854 -> 8854. 354 32 -> 35432 --- 앞의 자리가 같을 때, 일의 자리수는 무조건 앞 정렬

-> 둘다 10이상의 수일 경우 두번째 자리수. 세번째 자리수등을 비교

 

하지만 너무 비교연산이 많이들어가고 코드도 복잡해지는것같아 다른 사람의 코드를 참고했을 때, 위의 방법같은거 보단

문자열을 합친 후 더 큰쪽을 내림차순으로 정렬하는게 훨씬 좋은 코드.

 

 

반응형

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[레벨1] 폰켓몬  (0) 2021.10.24
[레벨 1] 없는 숫자 더하기  (0) 2021.10.23
[레벨 2] 더 맵게  (0) 2021.10.16
[레벨 2] 타겟 넘버  (0) 2021.09.30
[레벨 2] 주식가격  (0) 2021.09.29
Comments