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

Bob·2021년 12월 26일
0

algorithm level2

목록 보기
4/5

문제 설명

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.stream.Collectors;
import java.util.Arrays;
import java.util.Comparator;

class Solution {
      public static String solution(int[] numbers) {
      // Comparator를 사용하기 위해서 int배열을 String 배열로 만듬
        String[] stringNumbers = Arrays.toString(numbers).split("[\\[\\]]")[1].split(", ");
        // 가장 큰 수를 만들 수 있게 배열 sort
        Arrays.sort(stringNumbers, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
            // 두 수의 길이가 같을 경우엔 크기 비교
                if (o1.length() == o2.length()) return Integer.parseInt(o2) - Integer.parseInt(o1);
                boolean lengthCheck = o1.length() > o2.length();
                long maxCheck = 0;
                o1 = new String(new char[3]).replace("\0", o1);
                o2 = new String(new char[3]).replace("\0", o2);
                    String tmpNum = lengthCheck ? o1.substring(0, o2.length()) : o2.substring(0, o1.length());
                    if (lengthCheck) {
                        maxCheck = Long.parseLong(o2) - Long.parseLong(tmpNum);
                    } else {
                        maxCheck = Long.parseLong(tmpNum) - Long.parseLong(o1);
                    }
                return maxCheck > 0 ?  1 : maxCheck == 0 ? 0 : -1;
            }
        });

        return stringNumbers[0].equals("0") ? "0" : Arrays.stream(stringNumbers).collect(Collectors.joining());
    }
}

다른 사람 코드

0개의 댓글