문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
numbers return
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class Solution {
public String solution(int[] numbers) {
StringBuffer sb = new StringBuffer();
String answer = "";
ArrayList<Most> arrlist = new ArrayList<>();
for(int i=0; i<numbers.length; i++){
int realnum = numbers[i];
String str = String.valueOf(numbers[i]);
char index = str.charAt(0);
int firstnum = Character.getNumericValue(index);
arrlist.add(new Most(realnum, firstnum));
}
Collections.sort(arrlist, new firstNumComparator());
//missing return statement.
}
}
class firstNumComparator implements Comparator<Most> {
@Override
public int compare(Most m1, Most m2) {
if (m1.firstnum > m2.firstnum) {
return 1;
} else if (m1.firstnum< m2.firstnum) {
return -1;
}
return 0;
}
}
class Most {
int realnum;
int firstnum;
public Most(int realnum, int firstnum) {
this.realnum= realnum;
this.firstnum = firstnum;
}
}
Comparator을 Override하여 사용자 정의에 의한 정렬이 가능하도록 코드를 구현하였다.
로직은 맞다는 생각이 드는데, 어떻게 해야 realnum만을 추출하여 String으로 바꾸고 StringBuffer나 Concat을 이용하여
올바른 답을 return 할 수 있는지 모르겠다. 이 부분만 추가하면 문제가 해결될 것 같다. 해결책을 알아내는대로 수정 예정이다.
'코딩테스트 연습(with java) > 프로그래머스' 카테고리의 다른 글
프로그래머스<최소직사각형> - 완전 탐색 공부 후 수정예정 (0) | 2022.09.05 |
---|---|
JAVA(2022.08.20)-최소 직사각형 (0) | 2022.08.20 |
프로그래머스<다음 큰 숫자> (0) | 2022.08.16 |
프로그래머스<2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도> (0) | 2022.08.15 |
프로그래머스<3진법 뒤지기> - with Runtime Errors (0) | 2022.08.14 |