문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
[제한 사항]
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
[예시]
- [6, 10, 2] -> "6210"
- [3, 30, 34, 5, 9] -> "9534330"
문제 풀이
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String[] numList = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
numList[i] = String.valueOf(numbers[i]);
}
Arrays.sort(numList, (n1, n2) -> (n2 + n1).compareTo(n1 + n2));
if (numList[0].equals("0")) {
return "0";
}
StringBuilder sb = new StringBuilder();
for (String n : numList) {
sb.append(n);
}
return sb.toString();
}
}
- 먼저 numbers를 string으로 바꾸어준다
- int는 primitive type이라서 toString()을 못쓰고 String.valueOf를 사용해야 했다 (아니면 + "" 사용)
- 그 다음 정렬해준다: (n2 + n1).compareTo(n1 + n1)
- n2가 앞에 붙은 숫자의 합이 다른 합보다 클 때, n2가 갚으로 와야한다
- 만약에 첫번째 숫자가 0이면 입력값이 전부 0이란 소리가 된다
- 그럴때는 "000' 처럼 0만 담긴 문자열을 리턴하는 대신 그냥 "0"만 리턴해준다
- StringBuilder를 사용해서 값을 string으로 변환시켜준 뒤 돌려준다
- += 를 사용할 수도 있었지만 StringBuilder이 효율성이 더 좋아서 이걸 사용했다
'코딩테스트 > 정렬' 카테고리의 다른 글
| [프로그래머스] level 1 문자열 내 마음대로 정렬하기 - 자바 (2) | 2025.07.11 |
|---|