목표 (문제)
주어진 배열의 수를 조합하여 가장 큰 수를 만든다.
조건
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
잡설
생각한 과정에서 문제가 생겨 더이상 진행하지 못하고 다른 풀이를 보았는데 comparator를 사용한걸 알게되었다. 해당 comparator에 대해 기록해봐야겠다.
코드
public static String solution(int[] numbers) {
String answer ="";
List<String> list = new ArrayList<>();
int length = numbers.length;
for(int i=0; i<length; i++){
list.add(Integer.toString(numbers[i]));
}
int size = list.size();
Collections.sort(list, new Comparator<String>(){
@Override
public int compare(String num1,String num2){
return (num2+num1).compareTo(num1+num2);
}
});
if(list.get(0).equals("0")){
return "0";
}
for(int i=0; i<size; i++){
answer = answer + list.get(i);
}
return answer;
}
참조
잘못된 시도
잡설
처음 구조를 작성할때 Collections.sort를 string 일때 정렬하면 자리값 별로 비교하던것에 꽂혀서 구성을 했던것이 문제였던 것 같다. 비교하는 과정이 올바르지 않았기에 발생한 문제인것으로 생각한다.
코드
public static String solution(int[] numbers) {
List<LinkedList<String>> numberGroup = new ArrayList<>();
for (int i = 0; i < 10; i++) {
numberGroup.add(new LinkedList<>());
}
for (int num : numbers) {
String temp = Integer.toString(num);
int numIndex = Integer.parseInt(temp.substring(0, 1));
numberGroup.get(numIndex).add(temp);
}
for (LinkedList<String> numberList : numberGroup) {
Collections.sort(numberList, Collections.reverseOrder());
}
StringBuilder result = new StringBuilder();
for (int i = numberGroup.size() - 1; i >= 0; i--) {
System.out.println(numberGroup.get(i));
for (String number : numberGroup.get(i)) {
result.append(number);
}
}
return result.toString();
}
참조 - https://n1tjrgns.tistory.com/139
0 개의 댓글:
댓글 쓰기