{3,30,301,4} 같이 숫자들이 배열로 주어질때
순서를 정렬하여 가장 큰 수를 만들어보라는 문제다.
숫자를 정렬해 쭉 이어주면 될거같았다.
문제는 어떤 기준으로 정할지 고민되었다.
3 30 이면 303 보다 330이 더 크다.
그래서 각 숫자를 문자열로 만들고 이어준 후
어느것이 더 큰지 비교하였다.
가장 핵심이 되었던 함수다.
private int compareNum(int o1,int o2) {
String s1=String.valueOf(o1);
String s2=String.valueOf(o2);
int num1=Integer.parseInt(s1+s2);
int num2=Integer.parseInt(s2+s1);
return num2-num1;
}
또한 0을 체크해줘야하는데 안해줘서 틀렸었다.
(지금처럼 말고 list에 0번 인덱스가 0이면 0을 반환해도 될거같다.)
import java.util.*;
class Solution_가장큰수 {
List<Integer> list=new ArrayList<>();
public String solution(int[] nums) {
int zeroCnt=0;
for(int num:nums) {
if(num==0) zeroCnt++;
list.add(num);
}
if(nums.length==zeroCnt) return "0";
list.sort((o1,o2)->{
return compareNum(o1,o2);
});
StringBuilder sb=new StringBuilder();
for(int num:list) {
sb.append(num);
}
return sb.toString();
}
private int compareNum(int o1,int o2) {
String s1=String.valueOf(o1);
String s2=String.valueOf(o2);
int num1=Integer.parseInt(s1+s2);
int num2=Integer.parseInt(s2+s1);
return num2-num1;
}
}
public class 가장큰수 {
public static void main(String[] args) {
Solution_가장큰수 sol=new Solution_가장큰수();
int[] nums={3,30,301,4};
String ans=sol.solution(nums);
System.out.print(ans);
}
}