
가. 문제 설명
숫자를 왼쪽부터 확인했을 때, 높은 숫자를 가진 수가 더 왼쪽에 오게 만드는 문제이다.
나. 접근 방법
각 숫자를 3번반복하게 만들어 사전순으로 정렬한다.
만약
31이면313131로 만든다. 왜냐하면 숫자의 최대 값은 1000이기 때문이다.
다. 문제 유형
문자열 Controller
가. Sort를 위해 Stream으로 바꾼다.
나. 정렬을 한다.
각 숫자를 문자열로 바꾼다.
각 바뀐 문자열을 3번씩 곱해준다.
문자열을 사전순으로 비교를해서 내림차순 정렬한다.
comareTo() 사용
다. 합친다.
import java.util.*;
class Solution {
public String solution(int[] numbers) {
Integer[] arr = Arrays.stream(numbers)
.boxed()
.toArray(Integer[]::new);
String ans="";
Arrays.sort(arr, (a,b) ->String.valueOf(b).repeat(3).compareTo( String.valueOf(a).repeat(3)));
if(arr[0]==0) return "0";
for (int i=0; i<arr.length; i++){
ans+=String.valueOf(arr[i]);
}
return ans;
}
}
가. String.valueOf(숫자)
숫자의 값을 String으로 만들어준다.
나. String1.compareTo(String2)
각 문자열의 처음으로 다른 부분의 유니코드 차이를 반환한다.
만약 0과 9이면 0 :
48, 9 :57이고
0-9 :48-57=-9
이므로-9를 반환한다.
이 아이디어를 생각해내는 것이 굉장히 쉽지않았고 아직 문법의 부족함을 많이 느끼는 문제였다. 또한 스트림을 컨트롤 하는 방식이 먼저 스트림으로 만들고 원하는 자료형으로 바꾸는 방법임을 알게되었다.