1 분 소요

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

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다
세운 로직
  • 숫자 구성요소 뽑기
  • 문자 조합 만들기 (순열 만들기)
  • 만든 문자조합 숫자로 바꾸기
  • 오름차순 정렬 후 최대값 반환하기
내 풀이 ❌ (못품)
package sorting;

import java.util.ArrayList;
import java.util.Arrays;

public class 가장큰수 {

	public String solution(int[] numbers) {
        String answer = "";
        
        // part 1. 숫자 구성요소 뽑기  
        ArrayList<Integer> sums = new ArrayList<>() ; 
        
        String s1 = "" ; 
        for(int i = 0 ; i < numbers.length ; i++){         
           s1 += numbers[i]+"" ; 
        } // i   
        String[] stringNumber = s1.split(' ') ;  // 6 , 1, 0 , 2 
       
        // part 2. 문자 조합 만들기 (순열 만들기)
        
       
        // part 3. 만든 문자조합 숫자로 바꾸기  
        Integer[] answerArray = sums.toArray(new Integer[0]) ;  
        
        // part 4. 오름차순 정렬 후 최대값 반환하기 
        Arrays.sort(answerArray) ;
        int[] answers = Arrays.stream(answerArray)
            .mapToInt(Integer::intValue).toArray();

        return answers[answers.length-1]+"";
    }

}

좋은 모범 로직: 자바 비교기 사용 1 (diff)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";

        List<Integer> list = new ArrayList<>();
        for(int i = 0; i < numbers.length; i++) {
            list.add(numbers[i]);
        }
        Collections.sort(list, (a, b) -> {
            String as = String.valueOf(a), bs = String.valueOf(b);
            return -Integer.compare(Integer.parseInt(as + bs), Integer.parseInt(bs + as));
        });
        StringBuilder sb = new StringBuilder();
        for(Integer i : list) {
            sb.append(i);
        }
        answer = sb.toString();
        if(answer.charAt(0) == '0') {
            return "0";
        }else {
            return answer;
        }
    }
}
좋은 모범 로직: 자바 비교기 사용 2 (easy)
import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public String solution(int[] numbers) {
        String[] nums = new String[numbers.length];

        for (int i=0; i<nums.length; i++) 
            nums[i] = numbers[i] + "";

        Arrays.sort(nums, new Comparator<String>() {
            public int compare(String o1, String o2) {
                return (o2 + o1).compareTo(o1 + o2);
            }
        });

        String ans = "";
        for (int i=0; i<numbers.length; i++)
            ans += nums[i];

        return ans.charAt(0) == '0' ? "0" : ans;
    }
}


댓글남기기