프로그래머스 가장 큰 수
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 익명클래스를 이용하여 내림차순 정렬함..!
Leave a comment