[코딩테스트]

가장 큰 수 -프로그래머스 - java

everydeveloper 2025. 5. 5. 18:26

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

✅ 문제 개요

  • 목표: 주어진 숫자 배열을 이어붙여 만들 수 있는 가장 큰 수문자열로 반환

  • 입력: int[] numbers – 0 이상 양의 정수들

  • 출력: 가장 큰 수를 문자열 형태로 반환


🔍 핵심 아이디어:

커스텀 정렬

정렬 기준

  • 숫자 a, b를 문자열로 변환한 후

    a + b와 b + a 중 더 큰 쪽이 앞에 오도록 정렬

예시: a = "3", b = "30"
- "330" vs "303"
→ "330"이 더 크므로 "3"이 앞에 와야 함

🧩 풀이 순서

  1. int[] → String[] 으로 변환

  2. 정렬 기준: (s1 + s2).compareTo(s2 + s1)을 내림차순으로

  3. 정렬된 문자열들을 이어붙이기

  4. 예외 처리: 결과가 "000..."인 경우 "0" 반환


💻 자바 예시 코드

import java.util.*;

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

        // 1. 숫자를 문자열로 변환
        for (int i = 0; i < numbers.length; i++) {
            nums[i] = String.valueOf(numbers[i]);
        }

        // 2. 정렬 기준: (a + b) vs (b + a)
        Arrays.sort(nums, (a, b) -> (b + a).compareTo(a + b));

        // 3. 모두 0인 경우 처리
        if (nums[0].equals("0")) {
            return "0";
        }

        // 4. 정렬된 문자열 이어붙이기
        StringBuilder sb = new StringBuilder();
        for (String s : nums) {
            sb.append(s);
        }

        return sb.toString();
    }
}

⚠️ 주의할 점

항목 설명
a + b vs b + a 일반적인 숫자 정렬이 아니라 문자열 붙여서 비교
Arrays.sort() 정렬 기준 내림차순이어야 큰 수가 앞에 오도록 정렬됨
결과가 "0000" 등일 때 "0" 하나만 출력해야 함 (if (nums[0].equals("0")))
문자열 비교 (b + a).compareTo(a + b) — 큰 쪽이 먼저 오도록

🧠 이 문제를 통해 키운 사고력

  • 📌 정렬 기준을 스스로 정의하는 능력

  • 📌 문자열 비교 vs 숫자 비교의 차이 이해

  • 📌 그리디적 판단: 매 순간 가장 큰 숫자를 앞에 놓는 게 전체 최적