문제
https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
문제에서 배열의 길이는 100,000 이하이며 원소는 1,000이하의 수가 된다.
이럴 경우 백트레킹은 시간 초과로 풀이 하지 못하며, 자료형을 이용해서 풀이할 수 없다.
따라서 String 리스트를 만들어 정렬을 해주도록 했다.
정렬을 할 경우에는 두 수를 조합했을 때 더 큰수가 되도록 정렬을 하면 된다.
코드
import java.util.*;
class Solution {
public String solution(int[] numbers) {
List<String> list = new ArrayList<>();
boolean zero = true;
for(int i=0;i<numbers.length;i++){
list.add(String.valueOf(numbers[i]));
if(numbers[i] != 0) zero = false;
}
if(zero) return "0";
Collections.sort(list, (o1, o2)-> (o2+o1).compareTo(o1+o2));
String answer = "";
for(String str : list){
answer += str;
}
return answer;
}
}