Lina's Toolbox

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

문제 풀이/programmers

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

Woolina 2024. 10. 2. 02:02

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

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

 

제한 사항
  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

입출력 예
numbers return
[6, 10, 2] "6210"
[3, 30, 34, 5, 9] "9534330"

내 풀이

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        // 배열을 List로 변환
        List<Integer> numList = new ArrayList<>();
        for (int number : numbers) {
            numList.add(number); // 각 요소를 리스트에 추가
        }

        // 특정 기준으로 정렬
        Collections.sort(numList, new Comparator<Integer>() {
            @Override
            public int compare(Integer num1, Integer num2) {
                String str1 = Integer.toString(num1);
                String str2 = Integer.toString(num2);
                
                return (str2 + str1).compareTo(str1 + str2); 
            }
        });

        // 정렬된 결과를 문자열로 변환
        StringBuilder result = new StringBuilder();
        for (Integer num : numList) {
            result.append(num);
        }
        
        // 0인 경우 처리
        if (result.charAt(0) == '0') {
            return "0";
        }
        
        // 결과 반환
        return result.toString();
    }
}

 

3번째로 푸는 문제라 어렵지 않았다.

파이썬으로 두번이나 풀었던 문제라는 게 딱 기억이 나서

자바로 구현하는 방법만 알아내면 되었다.

 

입력이 [0, 0, 0]일 경우, 정렬 후 결과는 "000"이 되기 때문에,

이런 경우를 방지해 주는

// 0인 경우 처리 를 깜빡 해서 한 번 틀렸다.

저번에 풀 때도 이것 때문에 한번 틀렸던 듯😂

 

 

풀면서 자바 문법은 다른 별도의 포스팅에 작성하였다.

🔗 https://kimwoolina.tistory.com/129

 


https://school.programmers.co.kr/learn/courses/30/lessons/42746?language=java

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr