본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 가장 큰 수

by 현장 2026. 1. 4.

-Code

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        // 문자열의 합으로 최대를 정하기 때문에 문자열 배열로 변경
        String[] numStrs = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            numStrs[i] = String.valueOf(numbers[i]);
        }
        // 숫자 문자열 2개의 합을 비교해 정렬
        Arrays.sort(numStrs, (o1, o2) -> {
            return (o2 + o1).compareTo(o1 + o2);
        });
        // 처음이 0인 경우 000과 같이 나올경우 1개만 출력
        if (numStrs[0].equals("0")) {
            return "0";
        }
        // 첫번째 값이 0이 아니면 10이상이므로 상관없음
        StringBuilder answer = new StringBuilder();
        for (String num : numStrs) {
            answer.append(num);
        }
        return answer.toString();
    }
}

처음 정렬을 숫자를 문자열로 바꾸어 길이가 길면 뒤로 같으면 내림차순으로 정렬을 하였습니다. 하지만 그렇게 하면 2개의 문자열의 합이 큰 순서로 보장할 수없어서 문자열 2개의 합의 내림차순으로 정렬을 해야 했습니다. 또한 0이 처음안나 오면 10000과 같이 상관이 없지만 처음 나온 경우 000과 같은 경우가 생기기 때문에 그 부분은 모드 0 하나로 반환해야 하는 부분도 체크해야 했습니다.