https://school.programmers.co.kr/learn/courses/30/lessons/42746?language=java
문제 설명
0또는 양의 정수가 주어질 때, 정수를 이어붙여서 만들 수 있는 가장 큰 수?
이때, 문자열로 바꿔 return 해야함.
가령, [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]을 만들 수 있고, 가장 큰 수는 6210임!
풀이
가장 큰 수는 자릿수에서 앞에 오는 수가 커야 함.
이때, [3, 30, 34, 5, 9]의 경우 9534 다음, 3 vs 30을 비교해야하는데 숫자로만 봤을 때 30이 먼저 와야 할거 같지만 3이 먼저오고, 그다음 30이 와야만 최댓값임.
1. numbers의 숫자 정렬
정렬 기준) a+b v b+a를 비교해, 더 큰 값을 앞에 둔다.
가령, 300 vs 3일때 3003 보다 3300이 더 크다.
따라서, 3을 먼저 정렬하고, 그 다음 300을 정렬한다.
2. 정렬된 문자열 배열을 이어준다.
answer = String.join("", strNum);
3. 예외처리) 모든 숫자가 0일 경우 "00"이 아닌 "0"을 반환하도록 한다
if(strNum[0].equals("0"))
return "0";
import java.util.*;
class Solution {
public String solution(int[] numbers) {
String answer = "";
// 1. 정수를 문자열로 변환
String[] strNum = new String[numbers.length];
for(int i=0; i<numbers.length; i++){
strNum[i]= String.valueOf(numbers[i]);
}
// 2. 문자열 배열 정렬: 내림차순
Arrays.sort(strNum, (a,b)->(b+a).compareTo(a+b));
// 3. 정렬된 문자열을 이어 붙이기
answer = String.join("", strNum);
// 4. 예외처리([0,0]일 경우 "00"이 아닌 0이어야 함
if(strNum[0].equals("0")){
return "0";
}
return answer;
}
}