[Java] 가장 큰 수

allzeroyou·2025년 1월 21일
1

Java-Algorithm

목록 보기
9/26
post-thumbnail

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

문제 설명

0또는 양의 정수가 주어질 때, 정수를 이어붙여서 만들 수 있는 가장 큰 수?
이때, 문자열로 바꿔 return 해야함.

가령, [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]을 만들 수 있고, 가장 큰 수는 6210임!

풀이

가장 큰 수는 자릿수에서 앞에 오는 수가 커야 함.
이때, [3, 30, 34, 5, 9]의 경우 9534 다음, 3 vs 30을 비교해야하는데 숫자로만 봤을 때 30이 먼저 와야 할거 같지만 3이 먼저오고, 그다음 30이 와야만 최댓값임.

1. numbers의 숫자 정렬
정렬 기준) a+b v b+a를 비교해, 더 큰 값을 앞에 둔다.
가령, 300 vs 3일때 3003 보다 3300이 더 크다.
따라서, 3을 먼저 정렬하고, 그 다음 300을 정렬한다.

  • Arrays.sort(strNum, (a,b)->(b+a).compareTo(a+b)); 로 내림차순 정렬한다

2. 정렬된 문자열 배열을 이어준다.
answer = String.join("", strNum);

3. 예외처리) 모든 숫자가 0일 경우 "00"이 아닌 "0"을 반환하도록 한다
if(strNum[0].equals("0"))
return "0";

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        
        // 1. 정수를 문자열로 변환
        String[] strNum = new String[numbers.length];
        
        for(int i=0; i<numbers.length; i++){
            strNum[i]= String.valueOf(numbers[i]);
        }
        
        // 2. 문자열 배열 정렬: 내림차순
        Arrays.sort(strNum, (a,b)->(b+a).compareTo(a+b));
        
        
        // 3. 정렬된 문자열을 이어 붙이기
        answer = String.join("", strNum);
        
        // 4. 예외처리([0,0]일 경우 "00"이 아닌 0이어야 함
        if(strNum[0].equals("0")){
            return "0";
        }
        
        return answer;
    }
}
profile
모든 건 zero 부터, 차근차근 헛둘헛둘

0개의 댓글