카테고리 없음

정렬 - 가장 큰 수

JUNGKEUNG 2024. 7. 24. 23:51
반응형

이 문제는 숫자를 이어 붙였을 때의 크기를 비교하여 정렬하는 문제이다. 각 숫자를 문자열로 변환한 후, 두 문자열을 이어 붙였을 때의 크기를 비교하여 정렬할 수 있다.

 

public class Solution {
    public String solution(int[] numbers) {
        // 숫자를 문자열로 변환
        String[] numStrs = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            numStrs[i] = String.valueOf(numbers[i]);
        }

        // 커스텀 Comparator를 사용하여 정렬
        Arrays.sort(numStrs, new Comparator<String>() {
            @Override
            public int compare(String a, String b) {
                // 두 문자열을 이어 붙여 비교
                return (b + a).compareTo(a + b);
            }
        });

        // 정렬된 문자열 배열을 하나의 문자열로 합침
        StringBuilder sb = new StringBuilder();
        for (String num : numStrs) {
            sb.append(num);
        }

        // 결과 문자열이 "0"으로 시작하는 경우를 처리 (모든 숫자가 0인 경우)
        if (sb.toString().startsWith("0")) {
            return "0";
        }

        // 최종 결과를 answer에 저장하여 반환
        String answer = sb.toString();
        return answer;
    }
}

 

 

풀이

       // 숫자를 문자열로 변환
        String[] numStrs = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            numStrs[i] = String.valueOf(numbers[i]);
        }

 

- 각 숫자를 문자열로 변환 해준다.

 

 // 커스텀 Comparator를 사용하여 정렬
 Arrays.sort(numStrs, new Comparator<String>() {
      @Override
      public int compare(String a, String b) {
          // 두 문자열을 이어 붙여 비교
          return (b + a).compareTo(a + b);
      }
 });

 

 - 커스텀를 사용하여 문자열을 정렬 한다. 

   - 컴스텀은 두 문자열을 이어 붙여 비교한다. 예)  "6" 과 "10"을 비교할 때 "610" 과 "106:을 비교하여 더 큰 쪽을 앞으로 오도록 한다.

 

// 정렬된 문자열 배열을 하나의 문자열로 합침
StringBuilder sb = new StringBuilder();
for (String num : numStrs) {
     sb.append(num);
}

 - 정렬된 문자열을 하나의 문자열로 합친다.

 

// 결과 문자열이 "0"으로 시작하는 경우를 처리 (모든 숫자가 0인 경우)
if (sb.toString().startsWith("0") {
	return "0";
}

 - 문자열이 "0"으로 시작하는 경우를 처리한다. 

  - 마지막 문자열이 끝나는걸 확인 하고 싶으면 EndWith 를 사용하면된다.

 

 

 

Script

이번 문제에서 어떤걸 사용했는지 확인해보자.

1. String.valueOf 를 이용하여 숫자를 문자열로 변환

2. Comparator (커스텀) 을 이용하여 두 문자열을 붙여서 서로 비교

3. startsWith 이용하여 최종 결과 문자열이 "0"으로 시작하는지 확인