알고리즘

[이코테 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()도 있다.