[프로그래머스][Java] 가장 큰 수 (Lv.2) - 정렬

박현아·2024년 10월 24일
0

programmers-java

목록 보기
19/35

👩‍💻 문제

🙋‍♀️ 답변

import java.util.Arrays;

class Solution {
    public String solution(int[] numbers) {
        
        String[] strNum = new String[numbers.length];
        
        // String 배열로 바꿔주기
        for (int i =0; i<numbers.length; i++) {
            strNum[i] = String.valueOf(numbers[i]);
        }
        
        // strNum 배열 대소 비교 후 내림차순 정렬
        Arrays.sort(strNum, (a,b)->(b+a).compareTo(a+b));
        
        // StringBuilder : 가변 문자열
        StringBuilder answer = new StringBuilder();
        for (String str : strNum) {
            answer.append(str);
        }
        
        if (answer.charAt(0)=='0') {
            return "0";
        }
        
        return answer.toString();
    }
}

🤔

처음에 int 배열을 내림차순해서 큰 수를 만들어야되나? 하고 생각했는데 아니었다. 9와 34를 비교하면 34가 더 크지만 여기에서는 맨 앞자리수가 가장 큰 게 맨 앞에 와야했다. 그래서 그럼 한글자씩 떼어서 일일이 비교해야되나? 하며 멘붕이 옴 ㅎ.ㅎ Lv.2라 그런지 감이 안 잡혀서 chatgpt에게 힌트를 받아서 풀 수 있었ㄷㅏ....🥹 챗지피티 언니 똑똑해......
그래서 힌트는 !!
1. String 배열로 만든다
2. 배열의 a+b 와 b+a를 비교해서 큰 거 먼저 내림차순으로 정렬한다.
훨씬 간단하자나!!!!!

하지만 이 부분이 잘 이해가 안 됐다.

// strNum 배열 대소 비교 후 내림차순 정렬
Arrays.sort(strNum, (a,b)->(b+a).compareTo(a+b));

람다 말고 풀어서 쓰면 이렇게 된다고 한다.

// 익명 클래스를 사용하여 내림차순 정렬
Arrays.sort(strNum, new Comparator<String>() {
	@Override
	public int compare(String a, String b) {
		return (b + a).compareTo(a + b);
	}
});

그리고 Arrays.sort()를 하면 이런 방식으로 정렬이 된다.

양수 반환: compareTo() 메서드가 양수를 반환하면, 첫 번째 객체가 두 번째 객체보다 "크다"는 의미이므로, 정렬 시 첫 번째 객체가 두 번째 객체 뒤에 배치됩니다.
음수 반환: 음수를 반환하면, 첫 번째 객체가 두 번째 객체보다 "작다"는 의미이므로, 정렬 시 첫 번째 객체가 두 번째 객체 앞에 배치됩니다.
0 반환: 두 객체가 같다고 판단되면, 정렬 순서는 변경되지 않습니다.

이 부분에 대해서 더 공부해야겠다. 어려워!!

0개의 댓글