본문 바로가기
정리/알고리즘

정렬-가장 큰 수

by Hudini30 2022. 2. 15.

프로그래머스(정렬) 가장 큰 수

해당 문제는 비교하는 두 문자를 이어 붙인 수가 더 큰것을 상위로 올리는 Comparator 를 구현하여 풀었습니다. 처음 문제를 보고 문제를 잘못 이해하여 입력 받은 숫자의 자릿수들을 전부 추출하여 정렬하여 answer를 만들었었습니다. 정상적으로 이해 한 후에는 입력 받은 숫자를 문자로 바꿔 역순 정렬 하면 되겠다 하여 했지만, 생각했던 동작을 하지 못했습니다. 다른 방법으로는 두 문자를 비교 할때 최고 자릿수의 숫자를 비교하는 식으로 하고 최고 자릿수의 숫자가 동일 한 경우에 대해 같은 숫자를 채워 비교하는 식으로 구현하려고 했습니다. 예를들어 34, 3, 30 의경우 34, 33, 30 이라 생각하고 정렬 하게 하려 했고, 생각 했던 경우의 수는 모두 통과하였지만, 테스트 케이스를 통과하지 못했습니다.
마지막으로 두 숫자의 조합중 더 큰 것을 상위로 올리면 되겠다 생각하였습니다. 예를 들어 1, 10, 100, 1000의 경우 1과 10의 조합은 110 과 101 인데 110이 더 크므로 1이 10 보다 더 크다 생각하여 정렬하는 방식입니다. 3, 34, 30의 조합의 경우에도 334, 343 의 조합이 되므로 34가 3보다 위로, 330과 303 의 조합중 더큰 것은 330이므로 3이 30보다 위로 하여 34, 3, 30의 순으로 정렬되는 방식입니다. 최종적으로 정렬된 리스트를 순서대로 나열 하면 가장 큰 수를 조합할 수 있습니다. 예외로 0만 입력받은 경우 0000 이런식이지만 최종 정답은 0으로 노출되어야 하므로 예외 케이스를 두었습니다.

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

        List<String> sortedList = new ArrayList<>();
        for(int number : numbers) {
            sortedList.add(String.valueOf(number));
        }
        sortedList.sort((o1, o2) -> -(o1 + o2).compareTo(o2 + o1));

        for(String value : sortedList) {
            answer += value;
        }

        if(answer.charAt(0) == "0".charAt(0)) {
            return "0";
        }

        return answer;
    }

'정리 > 알고리즘' 카테고리의 다른 글

완전탐색 - 모의고사  (0) 2022.02.17
정렬 - H-Index  (0) 2022.02.16
정렬-K번째 수  (0) 2022.02.14
힙(Heap)-디스크 컨트롤러  (0) 2022.02.10
힙(Heap) 더맵게  (0) 2022.02.09

댓글