https://programmers.co.kr/learn/courses/30/lessons/42746
코딩테스트 연습 - 가장 큰 수
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰
programmers.co.kr
숫자들을 입력받아서 사전순으로 정렬해서 가장 큰 수를 만들면 되는 간단한 문제라고 생각하였으나,
0~1000 까지 입력 받을 수 있고, 숫자들을 문자열로 변환한 후에 최소 4자 이상 늘린다음, 문자열 비교를 해야 정렬이 된다.
그리고 실행하다보면, 테스트11에서 계속 막히는데 이유는 배열의 모든 값이 0인 경우에는 0을 리턴해야 한다.
(예제 코드)
- 단순 값으로는 정렬이 어려워서 Collections.sort 를 사용하여 별도의 정렬 과정을 진행하였습니다.
- mapToObj 사용한 이유는 int array 자체를 string array 로 변환하고자 사용하였습니다.
import java.util.*;
import java.util.stream.Collectors;
class Solution {
public static String solution(int[] numbers) {
int sum = Arrays.stream(numbers).sum();
if (sum == 0) return "0";
String[] strNumbers = Arrays.stream(numbers).mapToObj(String::valueOf).toArray(String[]::new);
List<String> orderedList = Arrays.stream(strNumbers)
.collect(Collectors.toList());
Collections.sort(orderedList, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String newO1 = o1 + o1 + o1 + o1;
String newO2 = o2 + o2 + o2 + o2;
return newO2.substring(0,4).compareTo(newO1.substring(0,4));
}
});
String answer = "";
for (String item : orderedList) {
answer += item;
}
return answer;
}
}'코딩테스트' 카테고리의 다른 글
| [프로그래머스] 단어 변환 (0) | 2022.03.29 |
|---|---|
| [프로그래머스] H-index (0) | 2022.03.29 |
| [프로그래머스] 신규 아이디 추천 (0) | 2022.03.16 |
| [프로그래머스] 신고 결과 받기 (0) | 2022.03.15 |
| [프로그래머스] 완주하지 못한 선수 (0) | 2021.08.30 |