[프로그래머스/JAVA] 가장 큰 수

밍주🫧 ·2025년 3월 2일
0
post-thumbnail

문제 원문

프로그래머스 가장 큰 수

문제 정리

정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꿔서 출력해라.

처음에는 그냥 단순히 ArrayList로 재배치해서 가장 마지막 순서부터 출력하려고 했다.
근데 두 자릿수 정수부터는 이게 안 먹힌다...
ex) {5, 30}이면 큰 수는 = 530 내가 원하는 방식대로 출력하면 350

그래서 다른 방식으로 접근해봤다.

Comparable 의 compareTo를 사용했는데 자세한 컨 코드를 보면서!


import java.util.*;

class Solution {
  public String solution(int[] numbers) {
        String answer = "";
        //numbers의 길이와 같은 크기의 String 배열 선언
        String[] num = new String[numbers.length];
        
        //String 배열에 numbers의 인자 넣어줌
        for(int i = 0; i < num.length; i++){
            num[i] = String.valueOf(numbers[i]);        
        }

        
        //n1 + n2와 n2 + n1을 비교해서 더 큰 수 반환
        Arrays.sort(num, (n1,n2) -> (n2 + n1).compareTo(n1 + n2));

        for(int i = 0; i < num.length; i++) {
            answer+=num[i];
        }
          
        return answer;
    }

}

✔️Comparable 의 compareTo
Arrays.sort로 정렬을 할 때, compareTo로 n1 + n2랑 n2 + n1을 비교

예시
numbers = [3, 30, 34, 5, 9] 라면
해당 int 배열을 String 배열로 바꿨기 때문에
n1 + n2 = 330 > n2 + n1 = 303 -> 그대로 유지
n1 + n2 3034 < n2 + n1 = 3430 -> 순서 바꿔서 return

이런 방식이 되는 것이다.

이렇게 했는데 자꾸 마지막 제출에서 오류가 났다.
배열에 모두 0이 들어가있을 경우에 대한 수를 계산하지 못한 것.

최종 코드


import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        
        StringBuffer answer = new StringBuffer();
        //numbers의 길이와 같은 크기의 String 배열 선언
        String[] num = new String[numbers.length];
        
        //String 배열에 numbers의 인자 넣어줌
        for(int i = 0; i < num.length; i++){
            num[i] = String.valueOf(numbers[i]);        
        }

        
        //n1 + n2와 n2 + n1을 비교해서 더 큰 수 반환
        Arrays.sort(num, (n1,n2) -> (n2 + n1).compareTo(n1 + n2));

        for(int i = 0; i < num.length; i++) {
            answer.append(num[i]);
        }

        if(num[0].equals("0")) {
            return "0";
        } else {
            return answer.toString();
        }

    }

}

마지막에 배열에 0만 포함되어있는 경우, 0만 출력할 수 있게 추가해줬다.

성공!

0개의 댓글

관련 채용 정보