https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드 & 풀이
import java.util.*;
class Solution {
public String solution(int[] numbers) {
int size = numbers.length;
String[] s_numbers = new String[size];
for (int i = 0; i < size; i++) {
s_numbers[i] = String.valueOf(numbers[i]);
}
Arrays.sort(s_numbers, (a, b) -> (b + a).compareTo(a + b));
if (s_numbers[0].equals("0")) return "0";
StringBuilder result = new StringBuilder();
for (String number : s_numbers) {
result.append(number);
}
return result.toString();
}
}
주어지는 numbers의 길이가 최대 100,000입니다.
이걸 조합으로 하면 터지겠죠?
그러면 우리는 문자열의 정렬을 이용할겁니다.
그것도 단순히 배열의 값을 기반으로 정렬하면 안됩니다.
numbers = {3, 30, 34, 5, 9} 일 때,
단순히 배열의 값으로 내림차순 정렬을 하면
numbers = {9, 5, 34, 30, 3} 이 됩니다.
이걸 이어붙이면 "9534303"이 되는데,
이는 우리가 원하는 "9534330"과 다르죠.
그렇기 때문에 우리는
문자열을 합쳐서 비교하는 겁니다.
String a, String b 가 있을 때,
a + b 와 b + a를 비교하는 겁니다.
a = 30, b = 3일 때
330와 303을 비교하는 것이죠.
그런식으로 정렬을 다 하면
numbers = {9, 5, 34, 3, 30}이 됩니다.
그러면 이걸 이어 붙여서 반환하면 끝입니다.
728x90
'프로그래머스 > Lv.2' 카테고리의 다른 글
전화번호 목록 - Python, HashMap, Dictionary (0) | 2025.05.10 |
---|---|
조이스틱 - Python, 그리디 (0) | 2025.05.07 |
월간 코드 챌린지 시즌2 > 2개 이하로 다른 비트 - Python, bin, rfind (0) | 2025.05.05 |
2025 프로그래머스 코드챌린지 1차 예선 > 비밀 코드 해독 - Python, combinations (0) | 2025.03.07 |
2022 KAKAO BLIND RECRUITMENT > 주차 요금 계산 - Python, ceil(올림), defaultdict (0) | 2025.03.01 |