티스토리 뷰


더보기
import java.util.*;

class Solution {
    
    // 문제 :
    // + 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
    // + 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 
    // + 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
    
    // + 가장 큰 수를 만들기 위해서는 앞자리 숫자가 큰 숫자를 먼저 정렬해야 한다.
    // + String타입의 문자열이 숫자일 경우 int 타입과 다르게 앞자리 순서대로 정렬이 되기에 이를 활용하고자 한다.
    
    public String solution(int[] numbers) {
        
        String answer = "";
        
        String [] str = new String [ numbers.length ];
        // + int 타입으로 비교하는 것이 아닌 String 타입으로 비교할 것이기에,
        // + numbers에 있는 int 타입의 원소를 String 타입으로 변환하여 저장할 배열 생성
        
        for ( int i = 0; i < numbers.length; i++ ){
            str [i] = String.valueOf( numbers[i] );
        } //for : int 타입을 String으로 변환하여 저장
        
        // + 내림차순 정렬 ( **** )
        // + Arrays.sort 메소드에서 Comparator 인터페이스를 통해 원하는 조건대로 정렬이 가능하다.
        Arrays.sort( str, new Comparator<String>(){
            
            @Override
            public int compare ( String a, String b ) {
                return ( b + a ).compareTo( a + b );
            } // compare
            
            // + a.compareTo(b) 
            // : 2개의 문자열 a와 b를 비교한 후, 결과 값으로 a - b를 int 타입으로 반환한다.
            // : a + b와 b + a로 비교하는 이유는 그 둘이 문자열 상으로 더했을때 더 큰 수를 만들어야 하기 때문이다.
            // : ex ) 38과 9이 있을 때 단순히 int타입으로 생각해서 내림차순 정렬하여 389라는 숫자를 만드는 것이 아니라 938이 만들어저야 한다.
            
        } );
        
        // + 모든 배열의 원소가 0일 경우 0을 반환해 준다. : 예외처리
        if ( str[0].equals("0") ){
            return "0";
        } // return
        
        // + enhanced for문을 돌면서 answer에 더해준다.
        for ( String s : str ){
            answer += s;
        } // enhanced for
        
        return answer;
        
    } // solution
    
} // end class

[ + String 배열에서 정렬을 진행했을 때 ]

[ + int 타입처럼 숫자의 크기대로 정렬이 되는 것이 아닌 앞자리 숫자대로 정렬이 이루어지는 것을 알 수 있다. ]

 


[ 참고 블로그 ]

 

https://ivory-room.tistory.com/43

 

[프로그래머스 Lv.2] 가장 큰 수 java

문제설명 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중

ivory-room.tistory.com

 

https://ifuwanna.tistory.com/232

 

[Java] 배열(Array) 정렬 하기 ( 오름차순,내림차순 등 )

| Arrays.sort() java.util.Arrays 유틸리티 클래스를 사용하면 배열(Array)을 정렬, 복제하거나, List로 변환 하는 등의 작업을 쉽게 처리 할 수 있습니다. 해당 클래스의 sort() 메서드를 사용하면 쉽게 오름

ifuwanna.tistory.com

 

728x90
댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항