개발 무지렁이

[문제풀이] Level2 가장 큰 수 본문

코딩 테스트/문제풀이

[문제풀이] Level2 가장 큰 수

Gaejirang-e 2023. 3. 1. 15:13

가장 큰 수


  🪅 클래스를 정렬하는 방법을 알고 있느냐 => implements Comparable<>, compareTo(), Collections.sort()
  🪅 클래스를 정렬할 때 두번째 정렬기준을 세울 수 있느냐 

💡 문제 접근 과정
한자리 수든, 두자리 수든, 세자리 수든 첫째 자리 수가 큰 것이 중요하다.
첫째자리 수가 같을 때 둘째 자리 수가 중요하다.
즉, 하나의 숫자에서 빼올 수 있는 정보가 많고 이를 클래스를 이용해 정리해야겠다는 생각을 했다.

클래스를 이 기준에서 정렬하기 위해 Comparable 인터페이스compareTo 메서드를 이용해야 했고, 두번째 정렬기준까지 구현해야했다.
이 상태에서 Collections.sort()를 하면 위의 기준에 따라 클래스가 정렬된다.
나는 입력이 두자리수까지 들어올 때의 가장 큰 수 밖에 구현하지 못했다. 결과적으로는 실패한 테스트케이스가 많다.
코드를 보면 굳이 int를 String으로 변환하고 다시 Integer로 변환한 이유는 String에 유용한 내장메서드가 많기 때문이다.

import java.util.*;

class NumInfo implements Comparable<NumInfo> {
    int origin;
    int firstDigit;
    int len;
    public NumInfo(int origin, int firstDigit, int len) {
        this.origin = origin;
        this.firstDigit = firstDigit;
        this.len = len;
    }

    public int compareTo(NumInfo o) {
        if(o.firstDigit - this.firstDigit == 0) {
            return (int)(o.origin % Math.pow(10, len-1)) - (int)(this.origin % Math.pow(10, len-1));
        }
        return o.firstDigit - this.firstDigit;
    }
}

class Solution {
    public String solution(int[] numbers) {
        String answer = "";
        List<NumInfo> list = new ArrayList<>();

        for(int i = 0; i < numbers.length; i++) {

            String firstDigit = String.valueOf(numbers[i]);
            int len = firstDigit.length();
            if(firstDigit.length() > 1) {
                firstDigit = firstDigit.substring(0,1);
            }
            NumInfo numInfo = new NumInfo(numbers[i], Integer.valueOf(firstDigit), len);
            list.add(numInfo);
        }
        Collections.sort(list);
        for(int i = 0; i < list.size(); i++) {
            NumInfo numInfo = list.get(i);
            answer += String.valueOf(numInfo.origin);
            System.out.println(numInfo.firstDigit);    
        }
        return answer;
    }
}
Comments