#75. 백준 25305번 문제 풀이: 커트라인 | 문제 원본 보기 |
--입력-- 5 2 100 76 85 93 98 --출력-- 98
점수들을 소팅한 후에 상받는 사람의 수(k) 번째 점수를 구하면 됩니다. 루틴으로 구현하자면, 큰 점수부터 카운트하므로 점수목록을 내림차순으로 소팅하고, k번째 배열의 점수를 출력해 주면 됩니다.
내립차순으로 처리하기 위해, 소팅함수에 사용할 콜백함수를 작성했다. return a > b 로 리턴값을 주도록 작성하면 큰값이 앞쪽으로 위치하게 소팅된다.
#include <iostream>
#include <algorithm>
using namespace std;
// 소팅함수에 사용하기 위해 값을 비교해 주는 콜백 함수 작성
// 내림차순으로 해야 하므로, 두 값을 받아 비교해서 크면 true
bool comp_rev(int a, int b) {
return a > b;
}
int main() {
int i, N, k;
int ns[1000]; // 응시자 점수를 저장할 배열
cin >> N >> k; // 응시자수(N)과 수상자수(k)의 값을 받는다.
for(i = 0; i< N; i++) cin >> ns[i]; // 응시자 점수를 받아 배열에 저장
sort(ns, ns + N, comp_rev); // 내림차순으로 소팅
cout << ns[k - 1]; // 인덱스는 0부터이므로 k - 1 번째 값을 출력
return 0;
}