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

Halo·2025년 7월 6일
0

Algorithm

목록 보기
69/85

🔍 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를 반환한다.


🤔 느낀점

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

profile
새끼 고양이 키우고 싶다

0개의 댓글