본문 바로가기

알고리즘/알고리즘

[프로그래머스][정렬]가장 큰 수

https://programmers.co.kr/learn/courses/30/lessons/42746

 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

import java.util.*;
class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        
        String[] str = new String[numbers.length];
        
        for(int i=0; i<numbers.length; i++){
            str[i] = String.valueOf(numbers[i]);
        }
        
        Arrays.sort(str, new Comparator<String>(){
           @Override
            public int compare(String a, String b){
                return (b+a).compareTo(a+b);
            }
        });
        
        if(str[0].equals("0")) return "0";
        
        for(String s :str) answer +=s;
        
        return answer;
    }
}

 

 

 

 

 

 


int 배열을 String 배열로 바꿔서 String으로 정렬하면 문자로 인식해서 가장앞에 있는 숫자가 큰 대로 나열을 해준다.

그런데 이렇게하면 

입력값 [3, 30, 34, 5, 9] ---> sort() ---> [9, 5, 34, 30, 3]

기댓값 "9534330"
실행한 결괏값 "9534303"이(가) 기댓값 "9534330"와(과) 다릅니다.

 

 

 

 

 

package com.company;

import java.util.Arrays;
import java.util.Collections;

public class programmers3 {

    public static void main(String[] args) {
     //https://programmers.co.kr/learn/courses/30/lessons/42746
        int[] numbers = {6, 61, 22, 2, 5, 9, 92, 62, 0};
        int[][] commands = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}};
        String str ="";
        String result = Solution.solution(numbers);
    }
    static class Solution {
        public static String solution(int[] numbers) {
            String answer = "";
            String[] string_array = new String[numbers.length];

            for(int i=0; i<numbers.length; i++){
                string_array[i] = String.valueOf(numbers[i]);//int[] -> String[]
            }
            Arrays.sort(string_array, Collections.reverseOrder());//내림 정렬
            //System.out.println(Arrays.toString(string_array));//[92, 9, 62, 61, 6, 5, 22, 2, 0]
            for(String s: string_array) answer += s;
            System.out.println(answer);//9296261652220
            return answer;
        }
    }
}