문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

 

예를 들어,

주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

 

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때,

순서를 재배치하여 만들 수 있는

가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

 

 

제한 사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

 

입출력 예

 


 

 

import java.util.*;


public class 가장큰수 {

	public static void main(String[] args) {

		System.out.println(solution(new int[] {6,10,2}));
		System.out.println(solution(new int[] {3,30,34,5,9}));
	}

	  public static String solution(int[] numbers) {
		   String answer = "";
		   
		   // 1. 문자로 바꾸고
		   // 2. 큰 순서대로 (내림차순) 정렬
		   // 3. 맨 앞으로 숫자가 0으로 시작을 할 경우는 0으로 출력
		   // 4. 문자 합치기
		   // 필요한거
		   // - rs : 숫자 합치는거, 결과
		   
		   // 결과를 담을 배열 생성
		   String[] rs = new String[numbers.length];
		   
		   // int배열 -> String배열로 변환
		   for(int i = 0; i < numbers.length; i++){
		      rs[i] = String.valueOf(numbers[i]);
		   }
		   
		   // 내림차순 정렬
		   // (제일 큰거를 순서대로, 배열 정렬)
		   Arrays.sort(rs, new Comparator<String>() {
		       @Override
		       public int compare(String a, String b) {
		           return (b+a).compareTo(a+b);
                   // 오름차순 정렬 
                   // (o1+o2).compareTo(o1+o2);
		       }
		   });
		   
		   // 내림차순으로 했기 때문에, 0이 나오면 0으로 결과 리턴
	        // 답이 000이 나오면 안되므로 첫번째값이 0이면 0을 리턴
		   if(rs[0].equals("0")){
			   return "0";
		   }
		   
		   // 최종
		   // 0이 아니면 문자열을 더해줍니다.
		   for(String a:rs) {
			   answer += a;
		   }
	 	   
	       return answer;
	    }
}

 

 

 

(참고)

Compare함수, compareTo() 사용하는 방법("비교하는 방법")  - https://hijjang2.tistory.com/854