[ 문제 해결1 ]

각 배열에 원소의 자릿 수를 비교해서 정렬해보니 시간이 오버된다는 것을 알 수 있었습니다.

 

 

[ 문제 해결2 ]

Comparator 을 사용해 문자열을 붙쳐서 판단 후, 내림차 순 해본다.

compareTo method 는 앞에서부터 비교하고 다른 문자열이 나오면 'a-b' 순서로 문자의 아스키 코드 값을 뺀 결과를 리턴합니다.

 

 

* 내림차순 : (o2+o1).compareTo(o1+o2);

* 오름차순 : (o1+o2).compareTo(o1+o2);

 

 

[ 코드 ]

import java.util.*;

public class 가장큰수 {

    /**
     *  TODO
     *      - 문제: 주어진 정수에서 가장 큰 수를 만들어라
     *      - 정수 배열을 문자 배열로 변환
     *      - Comparator 을 활용해 내림차 순 정렬
     *      - compareTo 의 아스키 코드 값 비교를 이용
     * **/

    public static void main(String[] args) {
        int[] arr = {3, 30, 34, 5, 9};
        String solution = solution(arr);
        System.out.println(solution);

    }

    public static String solution(int[] numbers) {
        String answer = "";

        String[] arr = new String[numbers.length];

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

        Arrays.sort(arr, new Comparator<String>() { // 내림차순 정렬
            @Override
            public int compare(String o1, String o2) {
                return (o2 + o1).compareTo(o1 + o2);
            }
        });

        if(arr[0].equals("0")) return "0";

        for (String i : arr) {
            answer += i;
        }

        return answer;
    }
}

 

 

 

[ 개념 ]

- Comparator 이 무엇인가?

기본 정렬이 아닌 다른 기준으로 사용하고 싶을 때 사용하는 인터페이스입니다.

그 중 compare를 구현함으로써 임의의 클래스에 대해 정렬 기준을 만들 수 있습니다.

compare override method

- 첫 번째 인자 < 두 번째 인자 : 음수
- 첫 번째 인자 > 두 번째 인자 : 양수
- 첫 번째 인자 == 두 번째 인자 : 0

 

그래서 Collections.sort 에 comparator 를 인자로 사용하는 부분을 살펴보겠습니다.

 

인자에는 다음과 같은 항목이 들어갈 수 있습니다.

 

1. 첫번째 인자 : 서로 다른 클래스에 존재하는 리스트

2. 두번째 인자 : Comparator 인터페이스의 compare 함수를 오버라이딩한 클래스

 

이렇게 사용하면 사용자가 원하는 형태로 정렬을 구현할 수 있게 됩니다.

'프로그래머스' 카테고리의 다른 글

가장 큰 정사각형 찾기 ( DP 알고리즘 )  (0) 2023.03.26
다음 큰 숫자  (1) 2022.11.20
124 나라의 숫자  (0) 2022.11.20
[1차] 캐시  (0) 2022.11.17
최솟값 만들기  (0) 2022.10.26

+ Recent posts