알고리즘
[이코테 with Java] 위에서 아래로
크딩학생
2024. 1. 25. 15:30
문제
하나의 수열에는 다양한 수가 존재한다. 이러한 수는 크기에 상관없이 나열되어 있다.
이 수를 큰 수부터 작은 수의 순서로 정렬해야 한다. 수열을 내림차순으로 정렬하는 프로그램을 만드시오.
입력 조건
- 첫째 줄에 수열에 속해 있는 수의 개수 N이 주어진다. ( 1 <= N <= 500)
- 둘째 줄부터 N + 1번째 줄까지 N개의 수가 입력된다. 수의 범위는 1 이상 100,000 이하의 자연수이다.
출력 조건
- 입력으로 주어진 수열이 내림차순으로 정렬된 결과를 공백으로 구분하여 출력한다. 동일한 수의 순서는 자유롭게 출력해도 된다.
입력 예시
3
15
27
12
출력 예시
27 15 12
1. 나의 코드
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int[] arr = new int[N];
for(int i=0; i<N; i++){
arr[i] = scanner.nextInt();
}
int max_index = 0;
int temp = 0;
for(int i=0; i<N; i++){
if(arr[i] >= arr[max_index]){
temp = arr[max_index];
arr[max_index] = arr[i];
arr[i] = temp;
}
max_index = i;
}
for(int i=0; i<N; i++){
System.out.print(arr[i] + " ");
}
}
}
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
int[] arr = new int[N];
for(int i=0; i<N; i++){
arr[i] = scanner.nextInt();
}
Arrays.sort(arr);
for(int i=N-1; i>=0; i--){
System.out.print(arr[i] + " ");
}
}
}
나는 총 두 가지 방법으로 풀었다.
첫 번째는, 선택 정렬을 활용해 max_index를 설정하고, 최댓값보다 크다면 더 앞에 위치하도록 만들었다.
두 번째는, util 내장 함수인 Arrays.sort를 활용해 정렬해주고, Arrays.sort()는 오름차순이기 때문에 역순으로 출력해주었다.
2. 종빈님의 코드
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
// N을 입력받기
int n = sc.nextInt();
// N개의 정수를 입력받아 리스트에 저장
Integer[] arr = new Integer[n];
for (int i = 0; i < n; i++){
arr[i] = sc.nextInt();
}
// 기본 정렬 라이브러리를 이용하여 내림차순 정렬 수행
Arrays.sort(arr, Collections.reverseOrder());
for(int i=0; i < n; i++){
System.out.print(arr[i] + " ");
}
}
}
종빈님은 기본 정렬 라이브러리를 활용하여 내림차순 정렬을 수행했다.
Collections.reverseOrder() 메서드는 Comparator 객체를 반환한다.
Comparator 객체는 역순으로 정렬시켜준다.
이와 비슷한 기능을 수행하는 것으로 Comparator 인터페이스의 정적 메서드로 Comparator.reverseOrder()도 있다.