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

강신현·2022년 3월 8일
0

문제링크

문제

풀이

문자열을 sort하는 문제로, 전 문제와는 다르게 정렬형태를 주어 정렬 기준을 넣어줘야 하는 문제였다.

void sort(첫번째주소, 마지막주소, 정렬형태)

bool cmp(string n1, string n2) 함수로 두 숫자를 조합한 두가지 경우중에 큰 경우를 판단했다.
예를 들어 6, 10이 인자로 들어왔을 경우 두가지 조합 610, 106 중에 큰 것을 판단했다.

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

using namespace std;

bool cmp(string n1, string n2){
    return n1+n2 > n2+n1;
}

string solution(vector<int> numbers) {
    vector<string> tmp;
    for(int i=0;i<numbers.size();i++){
        tmp.push_back(to_string(numbers[i]));
    }
    
    sort(tmp.begin(), tmp.end(), cmp);
    string answer = "";
    
    // 주어진 정수가 모두 0인 경우 0 리턴 (000리턴x)
    if(tmp[0] == "0")return "0";
    
    for(int i=0;i<tmp.size();i++){
        answer += tmp[i];
    }
    
    return answer;
}

int main(){
    
    string answer = solution({6,10,2});
    cout << answer;
    
    return 0;
}

🔥 trouble shooting

[0, 0, 0, 0]와 같이 0만 주어진 경우에 0을 리턴해야 하는데
0000을 리턴해주는 문제가 있었다.

if(tmp[0] == "0")return "0";

따라서 0만 포함되어 있는 경우 정렬해도 첫째자리 숫자가 0일테니까 첫째자리가 0일 때 "0"을 리턴해주었다.

프로그래머스에서 테스트 케이스를 추가하여 확인한 모습이다.

profile
땅콩의 모험 (server)

0개의 댓글

관련 채용 정보