[PGS] 가장 큰 수 - JAVA

최영환·2023년 8월 8일
0

Programmers

목록 보기
19/43

💡 문제

💬 입출력 예시

📌 풀이(소스코드)

import java.util.*;

class Solution {

    public String solution(int[] numbers) {
        int length = numbers.length;
        String[] strings = new String[length];

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

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

        if (strings[0].equals("0")) {
            return "0";
        }

        StringBuilder answer = new StringBuilder();
        for (String string : strings) {
            answer.append(string);
        }

        return answer.toString();
    }
}

📄 해설

접근

  • 첫번째 접근은 순열을 사용한 접근이었으나, 데이터가 최대 10만개여서 폐기하였다. 이후 접근을 못해서 블로그를 참고했다.
    출처: https://bellog.tistory.com/170
  • 숫자들의 앞자리 수가 큰 수가 먼저 와야 가장 큰 수를 만들 수 있으므로, 이를 기준으로 내림차순으로 숫자를 정렬해야한다.
  • 비교하는 숫자를 앞, 뒤 번갈아가며 이어붙인 것을 기준으로 비교한다는 접근을 해야한다.

과정

  • 숫자를 문자열로 변환한 배열을 하나 생성하고, 초기화한다.
  • 앞서 말한대로, 두 숫자를 앞, 뒤 번걸아가며 이어붙인 것을 기준으로 정렬을 수행한다.
  • 맨 앞 숫자가 0 이면 0을 반환하고, 그렇지 않다면 정렬된 숫자를 이어붙여서 반환한다.
  • 이때, 효율을 위해 String 대신 StringBuilder 를 사용하여 생성해주자.
    • 변경이 잦은 문자열을 핸들링 할 때는 String 보다 StringBuilderStringBuffer 가 더 효율적이다. 모른다면 찾아보길 바란다.
profile
조금 느릴게요~

0개의 댓글