문제 링크: https://programmers.co.kr/learn/courses/30/lessons/42746#
문제 접근
혼자서 하려다가 도저히 모르겠어서 질문하기를 통해 답을 참고했다.
핵심은 두 문자열을 합쳐서 가장 큰 수를 찾는 것이다.
예를 들면, 다음과 같은 배열이 있다고 하자
[1, 31, 200]
1
과 31
에서 가능한 수 조합은 131
, 311
이다.
311
이 더 크므로 정렬이 [31, 1, 200]
와 같이 변경되어야한다.
이 과정을 반복하면 되는 것이다.
소스 코드
import java.util.*;
import java.util.stream.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
List<String> strList = new ArrayList<>();
for (int num : numbers) {
strList.add(Integer.toString(num));
}
StringBuilder sb = new StringBuilder();
strList.stream()
.sorted((s1, s2) -> {
int a = Integer.parseInt(s1 + s2);
int b = Integer.parseInt(s2 + s1);
return b - a;
})
.forEach(sb::append);
answer = sb.toString();
return answer.charAt(0) == '0' ? "0" : answer;
}
}