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

chorok ☘️·2025년 7월 4일

코딩테스트

목록 보기
29/54
post-thumbnail

코딩테스트 연습 > 정렬 > 가장 큰 수

⚡ 문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

⚡ 제한사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

⚡ 입출력 예

numbersresult
[6, 10, 2]"6210"
[3, 30, 34, 5, 9]"9534330"

⚡ 구현코드

import java.util.*;

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

        for (int i = 0; i < numbers.length; i++) {
            strNumbers[i] = String.valueOf(numbers[i]);
        }
        
        Arrays.sort(strNumbers, (a, b) -> (b + a).compareTo(a + b));

        if (strNumbers[0].equals("0")) return "0";
        
        StringBuilder sb = new StringBuilder();
        for (String s : strNumbers) {
            sb.append(s);
        }

        return sb.toString();
    }   
}

⚡ 구현코드 해설

배열 안의 각 숫자의 단순 크기 비교가 아니니까 int 배열을 String 배열로 바꾸었다.
문자열 배열을 내림차순으로 정렬한다.
정렬된 순서대로 이어붙여서 최댓값 문자열을 완성한다.

Comparator

Arrays.sort(strNumbers, Comparator)
strNumbers를 정렬하는데, 내가 직접 정의한 비교 기준(Comparator)으로 정렬한다는 뜻!!

람다식 사용

(a, b) -> (b + a).compareTo(a + b)
두 문자열 a, b를 어떻게 비교할지 지정한다는 뜻.
우리는, 문자열 두 개를 붙여본 다음 (a+b, b+a) 어떤 조합이 더 큰지 비교한다!

aba+bb+a누가 앞에 와야 할까?
3303303033
34334333434
9595599

그리고, 만약 오름차순으로 정렬한다면 (a, b) -> (a + b).compareTo(b + a);

int -> String 변환 두 가지 비교

strNumbers[i] = Integer.toString(numbers[i]);
strNumbers[i] = String.valueOf(numbers[i]);

✅ 공통점
둘 다 int 값을 문자열(String) 로 변환하는 데 사용, 결과 동일.

✅ 차이점

항목Integer.toString()String.valueOf()
내부 동작intString으로 직접 변환intInteger.toString() 호출
null 전달 시 (Object)NPE 발생 (NullPointerException)"null" (문자열) 반환
가독성/의도 표현숫자를 문자열로 변환하고자 함이 명확함좀 더 일반적, 다양한 타입 처리에 적합
Integer num = null;

String a = String.valueOf(num);         // "null"
String b = Integer.toString(num);       // ❌ NullPointerException 발생

✅ 언제 어떤 걸 써야 할까?
숫자(int)를 문자열로 변환하려는 의도가 명확하면 → Integer.toString()
null일 수도 있는 객체나 다양한 타입을 처리할 경우 → String.valueOf()

✅ 결론
조금 더 일반적이고 안전한 방식으로는 String.valueOf()가 선호됩니다.

profile
백엔드 개발자 chorok's velog

0개의 댓글