[문제]
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
[Algorithm]
1. numbers 배열의 원소들을 문자열로 변환
2. 원소를 차례대로 2개씩 붙인 수를 비교해서 다시 정렬 → 람다식 + compareTo 함수 사용
3. 예외 처리 (전부 0인 경우)
4. 결과 문자열로 반환
[Code]
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String[] strNumbers = new String[numbers.length];
for (int i = 0; i < numbers.length; i++) {
strNumbers[i] = String.valueOf(numbers[i]);
}
Arrays.sort(strNumbers, (a, b) -> (b + a).compareTo(a + b));
if (strNumbers[0].equals("0")) {
return "0";
}
StringBuilder answer = new StringBuilder();
for (String str : strNumbers) {
answer.append(str);
}
return answer.toString();
}
}
[+ 다른 사람 풀이]
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
List<Integer> list = new ArrayList<>();
for(int i = 0; i < numbers.length; i++) {
list.add(numbers[i]);
}
Collections.sort(list, (a, b) -> {
String as = String.valueOf(a), bs = String.valueOf(b);
return -Integer.compare(Integer.parseInt(as + bs), Integer.parseInt(bs + as));
});
StringBuilder sb = new StringBuilder();
for(Integer i : list) {
sb.append(i);
}
answer = sb.toString();
if(answer.charAt(0) == '0') {
return "0";
} else {
return answer;
}
}
}
Array 배열이 아닌 list로 문제를 푼 방식
List는 Collections.sort() 메서드를 통해 소팅을 할 수 있기 때문에 Collections.sort()사용한 것이 포인트
그리고 answer.chatAt(0) == '0' 조건으로 배열의 원소가 다 0인 경우를 걸러내 0을 return 해주는 예외 처리
두가지를 포인트로 공부하면 좋을 듯!
[+ Plus]
더보기
💡Arrays 클래스의 sort() 메서드
→ 배열을 정렬하는 메서드
커스텀 정렬 방식 사용 가능
Arrays.sort(배열, Comparator);
💡Collections 클래스의 sort() 메서드
→ 리스트를 정렬하는 메서드
'Algorithm Study' 카테고리의 다른 글
[Java Algorithm] 프로그래머스 Lv.1 _ 최소직사각형 (2) | 2025.07.30 |
---|---|
[Java Algorithm] 프로그래머스 Lv.2 _ H-Index (2) | 2025.07.30 |
[Java Algorithm] 프로그래머스 Lv.1 _ K번째수 (2) | 2025.07.29 |
[Java Algorithm] 프로그래머스 Lv.3 _ 베스트앨범 (1) | 2025.07.28 |
[Java Algorithm] 프로그래머스 Lv.2 _ 의상 (3) | 2025.07.28 |