알고리즘/정렬

프로그래머스 - 가장 큰 수(Java)

연향동큰손 2025. 1. 11. 17:42

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

 

프로그래머스

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

programmers.co.kr

 

 

문제의 요구사항 분석을 이해하는것은 쉬웠으나, 구현이 매우 어려웠다.

 

주어진 숫자들로 가장 큰수를 만들기 위해서는 숫자들을 문자열로 변경하여 사전순의 역순으로 정렬한 것을 이어 붙히면 가장 큰 수가 된다.

 

그러기 위해서는 일단 입력 배열을 정수 배열에서 문자열 배열로 변경해줘야한다.

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

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

 

 

그 후  문자열 배열을 조건에 맞게 정렬해준다.

o1이 먼저 오고 o2가 뒤에 오는 경우와 o2가 먼저오고 o1이 뒤에 오는 경우를 비교.

정렬 기준

  • (b + a).compareTo(a + b):
    • 양수: (b + a)가 (a + b)보다 사전적으로 더 크다.
      • b가 a보다 앞에 와야 한다.
    • 음수: (a + b)가 (b + a)보다 사전적으로 더 크다.
      • a가 b보다 앞에 와야 한다.
    • 0: 두 문자열의 순서가 같으므로, 변경하지 않아도 된다.
Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));

이렇게 하면 사전적으로 내림차순 정렬이 구현된다.

 

정렬된 문자열을 StringBuilder를 통해 합치고 반환하면 정답이다.

StringBuilder answer = new StringBuilder();

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


        return answer.toString();

 

 

 

<전체 코드>

import java.util.Arrays;

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();
    }
}

'알고리즘 > 정렬' 카테고리의 다른 글

프로그래머스 - H-Index(Java)  (0) 2025.01.12
프로그래머스 - K번째수(Java)  (0) 2025.01.10