프로그래머스 정렬, 가장 큰 수

원현섭·2025년 7월 6일

Algorithm

목록 보기
69/86

🔍 Problem

프그래머스 정렬 파트, 가장 큰 수


📃 Input&Output


🌁 문제 배경

가. 문제 설명
숫자를 왼쪽부터 확인했을 때, 높은 숫자를 가진 수가 더 왼쪽에 오게 만드는 문제이다.


나. 접근 방법
각 숫자를 3번반복하게 만들어 사전순으로 정렬한다.

만약 31 이면 313131로 만든다. 왜냐하면 숫자의 최대 값은 1000이기 때문이다.


다. 문제 유형
문자열 Controller


📒 수도 코드

가. Sort를 위해 Stream으로 바꾼다.


나. 정렬을 한다.

  1. 각 숫자를 문자열로 바꾼다.

  2. 각 바뀐 문자열을 3번씩 곱해준다.

  3. 문자열을 사전순으로 비교를해서 내림차순 정렬한다.
    comareTo() 사용


다. 합친다.

  1. 내림차순 정렬된 문자열들을 모두 합쳐서 반환한다.

💻 Code

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
    
        
        Integer[] arr = Arrays.stream(numbers)
                                .boxed()
                                .toArray(Integer[]::new);
        String ans="";
        
        Arrays.sort(arr, (a,b) ->String.valueOf(b).repeat(3).compareTo( String.valueOf(a).repeat(3)));
        
        if(arr[0]==0) return "0";
        
        for (int i=0; i<arr.length; i++){
            ans+=String.valueOf(arr[i]);
        }
        
        
        return ans;
    }
}

🎸 기타

가. String.valueOf(숫자)
숫자의 값을 String으로 만들어준다.

나. String1.compareTo(String2)
각 문자열의 처음으로 다른 부분의 유니코드 차이를 반환한다.

만약 0과 9이면 0 : 48, 9 : 57이고
0-9 : 48-57 =-9
이므로 -9를 반환한다.


🤔 느낀점

이 아이디어를 생각해내는 것이 굉장히 쉽지않았고 아직 문법의 부족함을 많이 느끼는 문제였다. 또한 스트림을 컨트롤 하는 방식이 먼저 스트림으로 만들고 원하는 자료형으로 바꾸는 방법임을 알게되었다.

0개의 댓글