https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
numbers를 어떻게 정렬해야 가장 큰 수로 정렬이 될까, 심지어 각 자릿수도 달라서 정수형으로 고려하기에는 범위계산이 쉽지 않다.
numbers를 어떻게 정렬해야지 큰 수로 이을 수 있을까? -> 이어서 붙일 때 가장 큰 수를 만들도록 정렬
위 발상이 핵심이다. 말 그래도 a,b를 놓을지 b,a를 놓을지 어떤 수가 큰지를 비교하면 된다.
아래 코드가 핵심이다. 여기서 a와 b는 String타입임의 주의.
Arrays.sort(numberStrings, (a,b)-> (b+a).compareTo(a+b));
코드
import java.util.Arrays;
import java.util.Comparator;
public class Solution {
public String solution(int[] numbers) {
// 1. 모든 수를 문자열로 변환
String[] numberStrings = Arrays.stream(numbers)
.mapToObj(String::valueOf)
.toArray(String[]::new);
// 2. x+y와 y+x를 비교하여 정렬
Arrays.sort(numberStrings, (a,b) -> (b+a).compareTo(a+b));
// 3. 정렬된 numbers를 이어붙인 뒤 반환
StringBuilder answerBuilder = new StringBuilder();
for (String numberString : numberStrings) {
answerBuilder.append(numberString);
}
String answer = answerBuilder.toString();
// 0이 여러개일 경우, "000" 대신 "0"을 반환하도록 예외처리
if (answer.charAt(0) == '0') {
return "0";
} else {
return answer;
}
}
}
'Coding Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 프로세스 - 자바 (0) | 2023.08.10 |
---|---|
[프로그래머스] k번째수 - 자바 (0) | 2023.08.10 |
[프로그래머스] 베스트앨범 - 자바 (0) | 2023.08.09 |
[프로그래머스] 의상 - 자바 (0) | 2023.08.09 |
[프로그래머스] 전화번호 목록 - 자바 (0) | 2023.08.09 |