• 정수배열을 문자열배열로 바꾸기
String[] strNums = new String[numbers.length];
  for (int i = 0; i < numbers.length; i++) {
     strNums[i] = String.valueOf(numbers[i]);
  }
  • Arrays.sort() 사용 시 Comparator 인터페이스 사용
    이 인터페이스는 두 개의 인자를 받아서 비교하는 compare() 메소드를 가지고 있다.
    Comparator 인터페이스를 구현한 객체를 생성하여 Arrays.sort() 메소드의 두 번째 인자로 전달하면 이 객체는 두 개의 문자열을 이어붙인 후, 더 큰 문자열을 반환하도록 compare() 메소드를 구현한다. 이렇게 하면 문자열을 조합할 때 더 큰 수가 되도록 정렬할 수 있다.
    예를 들어, s1이 "30", s2가 "3"일 경우, str1은 "303"이 되고, str2는 "330"이 된다. 따라서, str2.compareTo(str1)의 반환값은 양수가 되며, sort() 메소드는 s2가 s1보다 앞에 위치하도록 정렬한다.
Arrays.sort(strNums, new Comparator<String>() {
   @Override
   public int compare(String s1, String s2) {
      String str1 = s1 + s2;
      String str2 = s2 + s1;
      return str2.compareTo(str1);
   }
});
  • StringBuilder로 큰 수 순서대로 정렬한 문자담기
StringBuilder sb = new StringBuilder();
for (String str : strNums) {
   sb.append(str);
}
  • 출력대상의 첫번째 문자가 0일 경우와 아닐 경우 판단 후 출력
if (sb.toString().charAt(0) == '0') {
    return "0";
} else {
    return sb.toString();
}

전체 코드

import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public String solution(int[] numbers) {

        String[] strNums = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            strNums[i] = String.valueOf(numbers[i]);
        }

        Arrays.sort(strNums, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                String str1 = s1 + s2;
                String str2 = s2 + s1;
                return str2.compareTo(str1);
            }
        });

        StringBuilder sb = new StringBuilder();
        for (String str : strNums) {
            sb.append(str);
        }
        if (sb.toString().charAt(0) == '0') {
            return "0";
        } else {
            return sb.toString();
        }
    }
}
profile
I'm still hungry.

0개의 댓글