Algorithms/Java

99클럽 코테 스터디 11일차 TIL + 가장 큰 수 (java)

Jenn28 2024. 8. 1. 22:53

 

💡 문제

권장 시간

  • 1시간

소요 시간

  • 40분

풀이 코드

import java.util.*;

class Solution {
    public String solution(int[] numbers) {
        // String으로 변환
        ArrayList<String> list = new ArrayList<>();
        for (int n : numbers) {
            list.add(Integer.toString(n));
        }
        
        // 이어붙인 String의 크기를 비교 및 정렬
        list.sort((a, b) -> (b + a).compareTo(a + b));
        
        // 앞자리가 0이면 숫자를 만들 수 없으니 예외처리
        if (list.get(0).equals("0")) {
            return "0";
        }
        
        // 가장 큰 숫자 출력
        StringBuilder sb = new StringBuilder();
        for (String num : list) {
            sb.append(num);
        }
        
        return sb.toString();
    }
}

주요사항

이 문제로 처음 알았는데 compareTo 함수는 Override 하지않고도 사용이 가능하다.

그리고, compareTo는 String이나 객체에 대한 비교만 가능하다. (Integer 불가!)

list.sort((a, b) -> (b + a).compareTo(a + b));

정수형의 오름차순 정렬은 아래와 같다.

numbers.sort((o1, o2) -> o1 - o2);

만약 비교도 하고 정렬하고 싶으면? Integer.compare()를 활용하면 된다.

numbers.sort((o1, o2) -> Integer.compare(o1 + o2, o1 * o2));

 

제한 조건에 따르면 시간복잡도를 고려하여 반복문은 사용하면 안된다는 것을 알 수 있다.

따라서, 정렬 방법을 사용해야한다.