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

JOY·2023년 8월 8일
0

[CodingTest] Java

목록 보기
56/61
post-thumbnail

🫡 문제

프로그래머스 - 가장 큰 수

🫡 코드

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        String[] arr = new String[numbers.length];
        
        for(int i=0; i<numbers.length; i++){
            arr[i] = String.valueOf(numbers[i]);
        }

        //numbers 배열의 숫자를 비교해서 내림차순 정렬
        //오름차순 일 경우 (o1 + o2).compareTo(o2 + o1))
        Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));

        //가장 큰 수가 0일 경우, 0보다 큰 수는  없으므로 0 반환
        if(arr[0].equals("0")){
            return "0";
        }

        for(String number : arr){
            answer += number;
        }
        
        return answer;
    }
}

🫡 풀이

정렬

💡문자열로 바꾸어 return 해야 한다.

❗해당 문제에서 주어진 숫자를 내림차순으로 정렬해서 출력하면 가장 큰 수가 되지 않는다.
  1. 해당 숫자를 문자열로 바꾸어 문자열 배열에 저장한다.
  2. Comparator 를 사용해서 2개의 문자열을 붙인 후 크기를 비교하여 내림차순 정렬한다.

[3, 30, 34, 5, 9]의 경우, "303".compareTo("330")이 되는데
330 (o1+o2) 보다 303 (o2+o1)이 더 작기 때문에 내림차순 정렬로
해당 배열의 순서는 [30, 3, 34, 5, 9]이 된다.
이런 식으로 값을 계속 비교해주다보면 마지막에는 [9, 5, 34, 3, 30] 순서로 정렬이 된다.

  1. 정렬이 끝난 후 가장 첫 번째 숫자가 가장 큰 숫자가 될텐데,
    첫 번째 숫자가 0 일 경우, 0 보다 큰 숫자는 없기 때문에 0을 반환해준다.

//해당 코드는 아래의 코드를 람다식으로 작성한 코드이다.
Arrays.sort(arr, (o1, o2) -> (o2 + o1).compareTo(o1 + o2));

👇

Arrays.sort( new Comparator<String> () {
	public int compare(String o1, String o2){
		return (o2+o1).compareTo(o1+o2);
	}
});

이런식으로도 작성이 가능하다.

Comparator<String> comp = new Comparator<String>() {
	public int compare(String o1, String o2){
		return (o2+o1).compareTo(o1+o2);
	}
});

Arrays.sort(arr, comp);

해당 숫자 크기 만큼 1의 자리, 10의 자리 등 수를 곱해서 비교를 하려 했더니
너무 복잡해질 것 같아서 풀이방법에 대해 고민을 많이 하다 결국 구글링의 도움을 받음 ㅜㅜ

profile
Just Do IT ------- 🏃‍♀️

1개의 댓글

comment-user-thumbnail
2023년 8월 8일

정보 감사합니다.

답글 달기

관련 채용 정보