프로그래머스 가장 큰 수

Updated:

문제 링크 : 프로그래머스 https://programmers.co.kr/learn/courses/30/lessons/42746

순열로 풀어보려고 했으나 O(2^N) 이라는 적지 않은 시간복잡도로 인해 잘못됨을 감지…

틀린 코드

import java.util.*;
class Solution {
    static int[] arr;
    static int[] arr2;
    static int size;
    static int x;
    public String solution(int[] numbers) {

        arr=numbers.clone();
        size=1;
        for(int i=1;i<=numbers.length;i++){
            size*=i;
        }
        arr2=new int[size];
        makePermutation(numbers.length,new int[numbers.length],new boolean[numbers.length]);

        Arrays.sort(arr2);


          String answer = arr2[arr2.length-1]+"";
        return answer;
    }

    private void makePermutation(int toChoose,int[] choosed, boolean[] visited){

        if(toChoose==0){
                String s="";
             for(int i=0;i<choosed.length;i++){
                s +=choosed[i]+"";
             }
            arr2[x]=Integer.parseInt(s);
            x++;
            return;
        }

        for(int i=0;i<arr.length;i++){
            if(!visited[i]){
                visited[i]=true;
                choosed[choosed.length-toChoose]=arr[i];
                makePermutation(toChoose-1,choosed,visited);
                visited[i]=false;
            }
        }

    }
}

정답 코드

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

        for(int i = 0; i < numbers.length; i++){
            str[i] = String.valueOf(numbers[i]);
        }

        //내림차순 정렬
        Arrays.sort(str, new Comparator<String>() {
            @Override
            public int compare(String a, String b) {
                return (b+a).compareTo(a+b);
            }
        });

        //0값이 중복일경우 ex){0,0,0}
        if (str[0].equals("0")) return "0";

        for(String s: str) answer += s;

        return answer;
    }
}

comparator 익명클래스를 이용하여 내림차순 정렬함..!

Tags: ,

Categories:

Updated:

Leave a comment