정렬 - Lv2 가장 큰 수 ( 프로그래머스 / JAVA )
🌜 Algorithm/Programmers

정렬 - Lv2 가장 큰 수 ( 프로그래머스 / JAVA )

728x90

안녕하세요. 그린주입니다  ๑'ٮ'๑

프로그래머스 코딩 테스트 시작!

 

 

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

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

programmers.co.kr

 

문제 설명

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

 

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고,

이중 가장 큰 수는 6210입니다.

 

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

순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록

solution 함수를 작성해주세요.

 

제한사항

numbers의 길이는 1 이상 100,000 이하입니다.

numbers의 원소는 0 이상 1,000 이하입니다.

정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

 

예제 #1

입출력 예
int[] numbers = {6, 10, 2}

입출력 예 설명 // 정답 : "6210"
순서를 재배치하였을 때 가장 큰 수는 6210입니다.

예제 #2

입출력 예
int[] numbers = {3, 30, 34, 5, 9}

입출력 예 설명 // 정답 : "9534330"
순서를 재배치하였을 때 가장 큰 수는 9534330입니다.

내 코드

import java.util.Arrays;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        // String 배열로
        String[] strNumbers = Arrays.stream(numbers)
                .mapToObj(String::valueOf)
                .toArray(String[]::new);

        // 내림차순 정렬
        Arrays.sort(strNumbers, (a, b) -> (b + a).compareTo(a + b));

        // 배열에 0밖에 없을 경우 0만 보냄
        if (strNumbers[0].equals("0")) {
            return "0";
        }

        // 정렬된 숫자 붙이기
        for (String s : strNumbers) {
            answer += s;
        }

        return answer;
    }
}

  Arrays.sort(strNumbers, (a, b) -> (b + a).compareTo(a + b));

 

A.compareTo(B)는 A와 B가 같을 경우 0을 리턴, A가 B보다 클 경우 양수로 리턴, A가 B보다 작을 경우 음수로 리턴됩니다.

 

예제 2의 30과 3으로 예를 들면,  a = 30, b = 3이고 내림차순 정렬을 하기 위해 A 자리에는 (b + a)로 설정합니다.

코드는 ("3" + "30").compareTo("30" + "3")이 되고, 결과는 "330"이 "303"보다 크기 때문에 양수로 리턴합니다.

즉 3, 30 순으로 정렬됩니다.


긴 글 봐주셔서 감사합니다!

오늘도 행복한 하루 보내세요 ✿'◡'✿


참고

[JAVA] int, String 배열의 오름차순, 내림차순 정렬

Convert int array to string array in Java

[프로그래머스] 가장 큰 수 (Java)


728x90
728x90