쌓고 쌓다
[프로그래머스] 가장 큰 수 C++ 풀이 및 해설 본문
https://school.programmers.co.kr/learn/courses/30/lessons/42746
풀이 방법
사용자 정의 정렬 함수를 등록하여 풀자.
숫자 6과 10이 주어졌을때
두 숫자를 앞 뒤로 순서를 바꿔가며 붙여보고 더 큰 숫자를 만들 수 있는 방법으로 정렬하면 된다.
6과10으로 6 10 = 610, 10 6 = 106을 만들 수 있다.
이때 6이 먼저 오는 방법이 더 큰 수를 만들 수 있음을 이용한다.
테스트케이스 11은
000과 같은 결과가 나왔을때 0으로 반환하는 경우를 고려해야한다.
앞에서부터 0을 지워나가면 된다.
단, 길이가 0이 되면 안되고, 0이 아닌 숫자를 만나는 경우 앞에서부터 0을 제거하는 과정을 멈추면 된다.
전체 코드
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool compare(int a, int b) {
string s1 = to_string(a);
string s2 = to_string(b);
if(stoi(s1+s2)>stoi(s2+s1))
return true;
else
return false;
}
string solution(vector<int> numbers) {
string answer = "";
sort(numbers.begin(), numbers.end(), compare);
for(int i=0; i<numbers.size(); i++) {
answer += to_string(numbers[i]);
}
// TEST CASE 11: [0, 0, 0] => 000 => 0 0이 포함된 결과를 처리하자.
while(1) {
if(answer[0]=='0' && answer.length()>=2)
answer.erase(0,1); // (pos, len) pos위치에서 len길이만큼 지움
else
break;
}
return answer;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 택배상자 C++ 풀이 및 해설 (0) | 2023.08.03 |
---|---|
[프로그래머스] 소수 찾기 C++ 풀이 및 해설 (0) | 2023.07.29 |
[프로그래머스] 다리를 지나는 트럭 C++ 풀이 및 해설 (0) | 2023.07.19 |
[프로그래머스] 롤케이크 자르기 C++ 풀이 및 해설 (0) | 2023.07.16 |
[프로그래머스] 숫자 변환하기 C++ 풀이 및 해설 (0) | 2023.07.13 |
Comments