본문 바로가기
IT 이야기/알고리즘

내림차순 정렬하는 방법 JAVA / C++ / 파이썬

by youngmap 2023. 1. 31.
반응형

정렬은 기본이 오름차순입니다.

1,2,3,4,5,6...

 

각 언어별로 내림차순 정렬하는 방법을 쉬운 알고리즘 문제를 풀어보며 확인해봅시다.

9,8,7,6,5...

 

https://www.acmicpc.net/problem/25305

 

25305번: 커트라인

시험 응시자들 가운데 1등은 100점, 2등은 98점, 3등은 93점이다. 2등까지 상을 받으므로 커트라인은 98점이다.

www.acmicpc.net

백준 25305번 커트라인 문제를 풀어봅시다.

 

응시자의 숫자만큼 점수가 주어집니다.

몇등까지 상을 받는지 k값이 주어집니다.

 

문제 풀이 아이디어는 다음과 같습니다.

1) 성적을 내림차순으로 정렬합니다.

2) 배열의 k-1번 째 성적을 출력합니다. (배열은 0부터 시작이므로 1번째 성적은 a[0] 이므로 1을 빼준다.)

 

 

1. JAVA

a 배열을 int가 아닌 Integer로 선언합니다.

이유는 내림차순 정렬을 위해 Collections.reverseOrder() 함수를 사용하기 위해서입니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;

public class Main {
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int N = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
					
		Integer[] a = new Integer[N];
		
		st = new StringTokenizer(br.readLine());
		for(int i = 0; i<N; i++){
			a[i] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(a, Collections.reverseOrder());
		
		System.out.println(a[k-1]);
	}
}


2. C++

C++은 sort 함수 세번째 인자로 greater<int>() 임시객체를 넣어주면 내림차순 정렬이 됩니다.

JAVA와 동일하게 풀면 재미가 없으니,

오름차순으로 정렬하고 N-K번째인 커트라인 점수를 출력하는 형태로 코딩해봅시다.

#include <iostream>
#include <algorithm>
using namespace std;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int N, k;
    cin >> N >> k;
	int a[N];

    for(int i = 0; i < N; i++){
        cin >> a[i];
    }
    sort(a, a+N);

    cout << a[N-k];
    return 0;
}


3. Python 파이썬

파이썬은 a.sort(reverse=True) 하면 내림차순으로 정렬합니다.

 

그런데 그냥 정렬해서 -k 번 째를 호출하면 뒤에서부터 찾습니다.

내림차순까지 갈필요도 없네요.

 

매우 직관적인 언어입니다.

N, k =map(int,input().split())
a = list(map(int,input().split()))
a.sort()
print(a[-k])

 

반응형