[프로그래머스] 정렬 - 가장 큰 수 (Java)
알고리즘/프로그래머스

[프로그래머스] 정렬 - 가장 큰 수 (Java)

반응형

프로그래머스 Level 2 정렬 - 가장 큰 수 (자바)

 

 

출처

programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수

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

programmers.co.kr

 

 

 

문제

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

 

 

 

제한사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

 

 

 

 

 

입출력 예

입출력 예 1

 

 

 

접근 방법

Comparator를 사용하면 정말 쉽게 풀이가 가능한 문제였다. 

Comparator에 익숙하지 않은 나는 찾아보고 이해하고 적용하였다.

1. 주어진 정수 배열을 문자열처럼 합해야 하기 때문에 String으로 변환한다.

2. Comparator을 사용해 정수의 조합이 큰 경우 변경되어야 하기 때문에 앞에 변경해야 하는 경우 뒤에 변경할 필요 없는 경우를 놓았다.

3. 0으로만 구성되어 있는 경우도 있을 수 있으므로 그런 경우엔 0을 return 한다.

(이 경우 때문에 테스트 케이스 하나가 계속 틀릴 것이다... 마지막 테스트 케이스가 안 되는 경우에는 이 경우를 생각해야 한다!!)

4. 정렬이 되어있는 배열을 순차적으로 더해 결과값을 반환한다.

 

 

 

내 코드

import java.util.*;
class Solution {
    public String solution(int[] numbers) {
       String answer = "";

        //int 배열을 String 배열로 변환
        String[] arr = new String[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            arr[i] = (String.valueOf(numbers[i]));
        }

        //배열 정렬, 정렬 규칙으로는 2개를 더하여 더 큰 쪽이 우선순위가 있도록 정렬
        Arrays.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                return (s2+s1).compareTo(s1+s2);
            }
        });

        //0000 처럼 0으로만 구성되어있으면 0 return
        if (arr[0].equals("0")) return "0";

        //그 외의 경우 순차적으로 연결하여 answer return
        for (int i = 0; i < arr.length; i++) {
            answer+=arr[i];
        }
        return answer;
    }
}

 

 

고려할 점

1. Comparator 사용법 알기

2. 예외경우 생각하기

 

 

 

반응형