[Programmers] 가장 큰 수

2023. 9. 18. 18:13Computer Sciences/Problem Solve

https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

프로그래머스

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

programmers.co.kr

문제 설명

주어진 숫자들을 이어붙여서 가장 큰 수를 만들면 되는 문제이다.

처음엔 문자열 배열에 넣고 정렬했다. 이렇게 하면 사전 순서대로 정렬되므로 이어 붙이기 수월했다. 그러나 34, 3, 30 과 같은 경우에 문제가 생겼다. 이런 경우를 어떻게 해야 할까 생각하다 다른 사람의 풀이를 보았는데 아주 간단했다. 정렬을 앞 문자열 + 뒷 문자열과 뒷 문자열 + 앞 문자열을 한 값으로 하면 되는 것이었다. 예를 들어 30, 3이 있다고 하면 303과 330으로 비교를 하게 되므로 303.compareTo(330)을 하면 1이 반환되므로 330이 앞으로 정렬된다. 참고로 compareTo를 활용하여 정렬을 하는 경우 compareTo의 결과가 양수면 두 원소의 위치를 변경하고 그 외에는 유지한다.

코드

import java.util.Arrays;

class Solution {
    public String solution(int[] numbers) {
        String[] strnums = new String[numbers.length];
        
        for (int i = 0; i < numbers.length; i++) {
            strnums[i] = String.valueOf(numbers[i]);
        }
        
        Arrays.sort(strnums, (s1, s2) -> (s2 + s1).compareTo(s1 + s2));
        
        if (strnums[0].equals("0")) {
            return "0";
        }
        
        String answer = "";
        for (int i = 0; i < strnums.length; i++) {
            answer += strnums[i];
        }
        
        return answer;
    }
}