반응형
정렬은 기본이 오름차순입니다.
1,2,3,4,5,6...
각 언어별로 내림차순 정렬하는 방법을 쉬운 알고리즘 문제를 풀어보며 확인해봅시다.
9,8,7,6,5...
https://www.acmicpc.net/problem/25305
백준 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])
반응형
'IT 이야기 > 알고리즘' 카테고리의 다른 글
키, 값 자료구조 값을 빠르게 찾는 방법 C++ / Java / 파이썬 (0) | 2023.02.03 |
---|---|
같은 데이터 빠르게 찾기 JAVA / C++ / 파이썬 (0) | 2023.02.03 |
좌표를 압축하는 알고리즘 JAVA / C++ / 파이썬 (0) | 2023.01.31 |
평균, 중위값, 최빈값, 범위 구하기 C++ / JAVA / 파이썬 정렬 시간복잡도 (0) | 2023.01.20 |
좌표 평면 2차원 배열로 표현 알고리즘 C++ / JAVA / 파이썬 (1) | 2023.01.20 |