프로그래머스/Lv.2
가장 큰 수 - JAVA, compareTo, lambda
아찌방
2025. 5. 16. 18:36
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