문제
교재 풀이
import java.util.Scanner;
public class P1427_내림차순정렬 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int[] A = new int[str.length()];
for (int i = 0; i < str.length(); i++) {
A[i] = Integer.parseInt(str.substring(i, i + 1));
}
for (int i = 0; i < str.length(); i++) {
int Max = i;
for (int j = i + 1; j < str.length(); j++) {
if (A[j] > A[Max]) //내림차순이므로 최대 값을 찾음
Max = j;
}
if (A[i] < A[Max]) {
int temp = A[i];
A[i] = A[Max];
A[Max] = temp;
}
}
for (int i = 0; i < str.length(); i++) {
System.out.print(A[i]);
}
}
}
내 풀이
import java.util.*;
import java.io.*;
public class Main
{
public static void main(String[] args) throws IOException {
// 내림차순으로 정렬
// 첫째 줄에 정렬하려고 하는 수 N => 1,000,000,000보다 작거나 같은 자연수
// 입력
// 2143
// 출력
// 4321
// 접근법
// 소트는 그냥 내장 함수 쓰면 되고
// 입력하는 것만 신경쓰면 되는데
// 2143을 어떻게 낱개로 쪼갤까?
// 이를 str으로 받고, substring() 함수를 써서 해도 됨
// 아님 앞에서 배운 str으로 받고 toCharArray로 한 다음
// -'0'을 해주면 되기도 하고
// 슈도코드
// 스캐너로 n 입력하고
// 이를 toCharArray로 해줘서 문자 배열로 만들고
// for 돌면서 -'0' 해주고 다시 숫자 배열에 담은 다음
// array.sort 쓰자
Scanner sc=new Scanner(System.in);
char[] chars=sc.nextLine().toCharArray();
int n=chars.length;
Integer[] nums=new Integer[n];
for(int i=0;i<n;i++){
nums[i]=chars[i]-'0';
}
Arrays.sort(nums, Comparator.reverseOrder());
for(int i=0;i<n;i++){
System.out.print(nums[i]);
}
}
}
설명
str.length()고 array.length인데 헷갈림
Arrays.sort()를 이용해서 배열을 내림차순으로 정렬하려면, 기본적으로 제공되는 오름차순 정렬을 활용한 후, 배열을 뒤집거나 Comparator를 사용해야 합니다. 다음은 이를 구현하는 두 가지 방법입니다.
방법 1: 배열을 오름차순으로 정렬한 후 뒤집기
import java.util.Arrays;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
Integer[] arr = {3, 5, 1, 4, 2};
// 오름차순으로 정렬
Arrays.sort(arr);
// 배열 뒤집기
Collections.reverse(Arrays.asList(arr));
// 결과 출력
System.out.println(Arrays.toString(arr));
}
}
이 방법은 간단히 오름차순으로 정렬한 후 Collections.reverse() 메서드를 사용하여 배열을 뒤집습니다. Arrays.asList()를 사용하여 배열을 리스트로 변환한 후, Collections.reverse()를 적용합니다.
방법 2: Comparator를 사용하여 내림차순 정렬
import java.util.Arrays;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
Integer[] arr = {3, 5, 1, 4, 2};
// Comparator를 사용하여 내림차순 정렬
Arrays.sort(arr, Comparator.reverseOrder());
// 결과 출력
System.out.println(Arrays.toString(arr));
}
}
이 방법은 Comparator.reverseOrder()를 사용하여 내림차순 정렬을 직접 수행합니다. Arrays.sort() 메서드는 Comparator를 인수로 받아 이를 기준으로 정렬을 수행합니다.
참고: 기본 타입 배열의 내림차순 정렬
위의 방법들은 Integer 배열에 대해서 작동합니다. 기본 타입 배열(int[])에 대해서는 Comparator를 사용할 수 없으므로, 이를 위해 래퍼 클래스인 Integer 배열로 변환하거나 별도로 정렬 후 뒤집는 방법을 사용해야 합니다.
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] arr = {3, 5, 1, 4, 2};
// 오름차순으로 정렬
Arrays.sort(arr);
// 배열 뒤집기
for (int i = 0; i < arr.length / 2; i++) {
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
// 결과 출력
System.out.println(Arrays.toString(arr));
}
}
이 방법은 기본 타입 배열을 오름차순으로 정렬한 후, 직접 배열을 뒤집는 과정을 포함합니다.
요약
- Arrays.sort(arr)와 Collections.reverse()를 사용하여 배열을 오름차순 정렬한 후 뒤집을 수 있습니다.
- Arrays.sort(arr, Comparator.reverseOrder())를 사용하여 직접 내림차순으로 정렬할 수 있습니다.
- 기본 타입 배열의 경우, Integer 배열로 변환하거나, 정렬 후 직접 배열을 뒤집는 방법을 사용할 수 있습니다.