본문 바로가기

Algorithm/Programmers

[프로그래머스_JAVA_알고리즘] 가장 큰 수 #정렬

Arrays.sort에 Comparator을 사용하여 구현할 수 있습니다.

Comparator은 두 숫자 문자열의 조합을 비교하여 어느 조합이 더 큰지를 판단할 수 있습니다.

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        String[] arr = new String[numbers.length];
        
        for(int i = 0; i < numbers.length; i++)
            arr[i] = Integer.toString(numbers[i]);
        
        Arrays.sort(arr, new Comparator<String>() {
            public int compare(String s1, String s2) {
                return (s2 + s1).compareTo(s1 + s2);
            }
        });
        
        if (arr[0].equals("0")) return "0";
        
        for (int i = 0; i < arr.length; i++)
            answer += arr[i];
        
        return answer;
    }
}

            

return (s2 + s1).compareTo(s1 + s2);

다음 코드는 s1과 s2를 받아 (s2 + s1)과 (s1 + s2)의 값을 비교합니다.

예를 들어 s1 = "3"이고 s2 = "30"인 경우, (s2 + s1)은 "303", (s1 + s2)는 "330"이 되며 "330"이 더 크기 때문에 s1이 앞에 오도록 정렬합니다.
양수: (s2 + s1)이 (s1 + s2)보다 크므로, s1이 s2 뒤에 배치됩니다.
음수: (s2 + s1)이 (s1 + s2)보다 작으므로, s1이 s2 앞에 배치됩니다.

 

Comparable과 Comparator는 모두 인터페이스입니다.

인터페이스를 사용하려면 인터페이스 내에 선언된 메서드를 구현해야 합니다.

 

다음은 Comparator를 구현하여 정렬하는 예제입니다.

List<String> list = Arrays.asList("banana", "apple", "cherry");

Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.compareTo(s2); // 알파벳 순으로 오름차순 정렬
    }
});

compare(o1, o2) 메서드는 o1과 o2의 순서를 결정합니다.

양수: o1이 o2보다 큰 순서로 배치됨 (내림차순)

0: o1과 o2는 같음

음수: o1이 o2보다 작은 순서로 배치됨 (오름차순)

 

.

.

.

 

문제는 아래에서 확인할 수 있습니다.

https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr