그리디 알고리즘, 정렬을 사용했다.
수를 어떻게 합쳐야 하나 생각해봤을 때
무조건 큰 순서대로 정렬하면 안된다.
그 예로 90과 9가 있을 때 909, 990 중 990이 더 크다.
그렇다면 어떻게 비교해야 하냐면
바로 990, 909 를 직접비교하는 것이다.
둘을 직접 비교하여서 더 큰 값을 앞쪽에, 더 작은 값을 뒤쪽에 배치하면 문제를 해결할 수 있다.
import java.io.*;
import java.util.*;
public class Main {
static StringBuilder sb=new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n=Integer.parseInt(br.readLine());
String arr[]=new String[n];
st=new StringTokenizer(br.readLine());
for(int i=0;i<arr.length;i++)
arr[i]=st.nextToken();
Arrays.sort(arr,new Comparator<>() {
@Override
public int compare(String n1,String n2) {
return (n2+n1).compareTo(n1+n2);
}
});
for(int i=0;i<arr.length;i++)
sb.append(arr[i]);
boolean find=false;
for(int i=0;i<sb.toString().length();i++)
if(sb.toString().charAt(i)!='0') find=true;
if(find)
System.out.println(sb);
else
System.out.println("0");
}
}
처음에 00000이 입력일 때 0을 출력하는 예외를 처리하지 못해서 한 번 틀렸다.
문제를 다시 읽으면서 반례나 예외가 뭘지 생각했다.
한줄 평: 이게 왜 플레 문제인가요?
어제 골드 문제에서 눈물의 똥꼬쇼 하다가
처음 푸는 플레 문제를 너무 허무하게 맞혀서 좀 기분이 이상하다.
하루에 백준 1문제 이상 푸는 것을 목표로 하고있다.
https://solved.ac/profile/anwlro0212