문제 풀이/프로그래머스

[프로그래머스] 가장 큰 수(JAVA)

27200 2024. 4. 28. 14:58

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


풀이

import java.util.*;

public class Solution {
    public String solution(int[] numbers) {
        String[] arr = new String[numbers.length];

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

        Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));
        
        if (arr[0].equals("0")) {
           return "0";
        }

        StringBuilder answer = new StringBuilder();

        for (int i = 0; i < arr.length; i++) {
            answer.append(arr[i]);
        }


        return answer.toString();
    }
}

 

내림차순으로 가져다 붙이면 될거라는 생각을 했다.

다만 자리수자가 다른 경우 10으로 나누어 가면서 보면 되는건가...? 그럼 언제까지..? 라는 생각이 들었다.

이유는 이렇다. 6과 30이 있다면 당연히 6이 먼저 가는게 좋다. 하지만 6 61 69가 있다면 69라는 숫자를 처음으으로 보내는게 유리할 것이다. 마찬가지로 6 61 690 6903 이 있다면 690을 붙일지 6903을 붙일지는 그 다음 어떤 숫자가 남아있느냐에 따라 다를 것이다.

즉, 단순 정렬로는 문제를 쉽게 해결하기 어렵다.

 

직접 정렬을 구현해야하나 고민하던 차에 Araays.sort새로운 문법을 알게되어 사용했다.

Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));

해석하자면 다음과 같다. o1 o2의 위치를 정할 것이다. ex) o1 = 9, o2 =3이면 39<->비교 93 뒤의 93이 더 크다. 즉 순서를 유지한다.(o1과 o2를 그대로 둬라!) -> 내림차순 정렬 가능