💡Problem Solving/Programmers

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

gom20 2021. 12. 8. 20:31

문제

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

 

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

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

programmers.co.kr

 

풀이

[6, 10, 2] "6210"

숫자를 String으로 변환 한 후, 인접 한 숫자끼리 합쳐서 사전 순서를 비교한다.  

순서대로 합친 문자열이 사전의 뒷 순서가 되도록 숫자의 위치를 변경해준다.

 

[6, 10, 2]

6, 10 = 610

10, 6 = 106 

610이 사전의 뒷 순서이므로 변경하지 않는다.

 

[6, 10, 2]

10, 2 = 102

2, 10 = 210

210이 사전의 뒷 순서이므로 순서를 변경한다. 

 

[6, 2, 10]

6, 2 = 62

6, 2 = 26

순서를 변경하지 않는다. 

 

답: 6210

 

Java의 Comparator로 정렬 조건을 구현한다. 

String s1, String s2 문자가 있을 때 

a = s1 + s2

b = s2 + s1

a.compareTo(b) == 0 : a 와 b 값이 동일. 

a.compareTo(b) > 0 : a의 사전 순서가 b보다 뒤이다. 

a.compareTo(b) < 0 : a의 사전 순서가 b보다 앞이다. 

            @Override
            public int compare(String s1, String s2){
                String a = s1 + s2;
                String b = s2 + s1;
                int rs = a.compareTo(b);
                if(rs == 0){
                    return 0;
                } else if(rs > 0) {
                    return -1;
                } else {
                    return 1;
                }
            }

 

 

소스코드

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        List<String> list = new ArrayList<String>();
        boolean allZero = true;
        for(int number : numbers){
            if(allZero && number != 0) allZero = false;
            list.add(String.valueOf(number));
        }
        if(allZero) return "0";
        
        Collections.sort(list, new Comparator<String>(){
            @Override
            public int compare(String s1, String s2){
                String a = s1 + s2;
                String b = s2 + s1;
                int rs = a.compareTo(b);
                if(rs == 0){
                    return 0;
                } else if(rs > 0) {
                    return -1;
                } else {
                    return 1;
                }
            }
        });
        for(String n : list){
            answer += n;
        }
        
        
        return answer;
    }
}