Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[문제풀이] Level2 가장 큰 수 본문
가장 큰 수
🪅 클래스를 정렬하는 방법을 알고 있느냐 => 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;
}
}
'코딩 테스트 > 문제풀이' 카테고리의 다른 글
[문제풀이] B10807 개수세기 (1) | 2023.03.12 |
---|---|
[문제풀이] Level2 더 맵게 (0) | 2023.03.01 |
[문제풀이] Level1 K번째 수 (0) | 2023.03.01 |
[문제풀이] Level2 위장 (0) | 2023.02.28 |
[문제풀이] Level2 전화번호 목록 (0) | 2023.02.28 |
Comments