학습 기록 (Learning Logs)/알고리즘
[프로그래머스][정렬]가장 큰 수
devWonny
2021. 9. 28. 20:45
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;
}
}
}