나만의 작은 도서관
문제 42746. 가장 큰 수 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42746
난이도 : Lv.2
문제 요약 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
입력
- 0 또는 양의 정수가 담긴 배열 numbers
입력 제한
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
입력 예제
// input
[6, 10, 2]
// ans
"6210"
풀이 방식
c++의 힘을 빌린 문제이다. c++에는 cmp를 통해 정렬기준으로 변경할 수 있는데, 이 기준만 잘 설정하면 이번 문제는 날로(?) 먹을 수 있다.
필자가 문제를 풀 때는 숫자의 가장 큰 자리수를 기준으로 내림차순으로 정렬하였다.
정답 코드
더보기
#include <string>
#include <vector>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
bool cmp (int a, int b){
int temp_a = a;
int temp_b = b;
while(temp_a >= 10.0) temp_a/=10;
while(temp_b >= 10.0) temp_b/=10;
if(temp_a == temp_b){
string str_a = to_string(a);
string str_b = to_string(b);
return str_a + str_b > str_b + str_a;
}
return temp_a > temp_b;
}
string solution(vector<int> numbers) {
string answer = "";
sort(numbers.begin(), numbers.end(), cmp);
for(int elem : numbers){
answer += to_string(elem);
}
if(answer.length() > 0 && answer[0] == '0') return "0";
return answer;
}
'프로그래머스 문제풀이 > 코드카타' 카테고리의 다른 글
문제 68936. 쿼드압축 후 개수 세기 (0) | 2024.07.28 |
---|---|
문제 42839. 소수 찾기 (0) | 2024.07.27 |
문제 42583. 다리를 지나는 트럭 (0) | 2024.07.25 |
문제 77885. 2개 이하로 다른 비트 (0) | 2024.07.24 |
문제 154538. 숫자 변환하기 (4) | 2024.07.23 |