[programmers] 정렬 - 가장 큰 수

현우·2022년 8월 19일
0

CodingTest

목록 보기
8/9

1. 나의 풀이

  1. 문자열을 정렬해서 내림차순으로 정렬
  2. 정렬된 문자열을 하나의 문자열로 만들기

는 실패했다.

[3, 30]을 내림차순으로 정렬하면 [30, 3]이 나올텐데 이를 합치면 303이 나온다. 우리가 원하는 가장 큰 수 는 330인데도,,

다른 방식으로 이를 정렬해주는 방식이 필요했다.

2-1. 풀이

1번 풀이
import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        
        String[] array = new String[numbers.length];
        for(int i = 0; i < numbers.length; i++){
            array[i] = String.valueOf(numbers[i]);
        }
        
        Arrays.sort(array, Comparator.reverseOrder());
        
        StringBuilder builder = new StringBuilder();
        for(String j: array){
            builder.append(j);
        }
        String answer = builder.toString();
        return answer;
    }
}

이런 식으로 정렬이 되지 않음!


2번 풀이
import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        
        String[] array = new String[numbers.length];
        for(int i = 0; i < numbers.length; i++){
            array[i] = String.valueOf(numbers[i]);
        }
        Arrays.sort(array, new Comparator<String>() {
            @Override
            public int compare(String a, String b) {
                return (b+a).compareTo(a+b);
            }
        });
        if(Integer.parseInt(array[0]) == 0)
            return "0";
        
        StringBuilder builder = new StringBuilder();
        for(String j: array){
            builder.append(j);
        }
        String answer = builder.toString(); 
        return answer;
    }
}

11번 테스트 케이스는 [0, 0, 0, 0]이라고 보면된다. 이렇게 되면 우리가 원하는 답은 0인데 0000이라는 문자열을 출력한다. 따라서 0번 인덱스가 0이라면 해당 배열에는 0밖에 없을 것이기 때문에 그냥 0을 반환한다.

Comparator 즉, 비교하는 기준을 직접 정의했다. default로는 오름차순 정렬이다.


3. 메서드

StringBuilder - 문자열을 합할 때에는 '+'보다 StringBuilder의 속도가 훨씬 빠르다고 한다.

0개의 댓글