본문 바로가기
[ 다먹살 ]/- Coding

[프로그래머스] 레벨2 가장 큰 수

by 엉망으로살기 2021. 8. 2.
반응형

 

https://programmers.co.kr/learn/courses/30/lessons/42746?language=java 

 

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

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

programmers.co.kr

 

사실 처음에는 접근하는 방법이 막막했었다. 왜냐하면 단순히 Arrays.sort() 같은 정렬을 했을 때에는 37 같은 숫자가 4보다 크다고 정렬이 되기 때문이다. 그리고 반복문을 중첩해서 해결할 수 있을 것 같기도 했지만 최대 원소 갯수가 10만 개였기 때문에 시간초과에 대한 리스크가 굉장히 컸었다.

그래서 다른 방법을 구글링해보다가 이 sort 함수를 자체적으로 오버라이드해서 정의해서 사용할 수 있다는 것을 알게 되었다. 결국 숫자 형식의 값을 String으로 바꾼 후, 이 String 값들을 다시 비교해서 리턴하는 식으로 해결했다.

 

import java.util.Arrays;
import java.util.Comparator;

class Solution
{
    public String solution(int[] numbers)
    {
        int n = numbers.length;
        String[] str = new String[n];
        String answer = "";
        
        for(int i=0; i<n; i++)
        {
            str[i] = numbers[i] + "";
        }
        
        Arrays.sort(str, new Comparator<String>()   {
            @Override
            public int compare(String a, String b)
            {
                return (b+a).compareTo(a+b);
            }
        });
        
        if(str[0].equals("0"))
        {
            return "0";
        }
        
        for(int i=0; i<n; i++)
        {
            answer += str[i];
        }
        
        return answer;
    }
}

반응형

댓글