#75. 백준 25305번 문제 풀이: 커트라인 문제 원본 보기
대학교 슬기로운 코딩생활에 N명의 학생이 응시했다. 이들 중 상위 k명이 상을 받을 것이다. 이 때, 상을 받는 커트라인 점수를 구하라. 커트라인이란 상을 받는 사람들 중 가장 가장 낮은 사람의 점수를 말한다. 입력: 첫줄에 응시자수 N과 상을 받는 사람 k가 공백으로 구분해서 주어진다. 둘째 줄에는 각 학생의 점수 x 가 공백을 사이에 두고 주어진다.   ( 1≤N≤1000 , 1≤k≤N , 0≤x≤10000 )   출력: 상을 받는 커트라인
입력/출력
--입력--
5 2
100 76 85 93 98
--출력--
98
문제풀이+해설
점수들을 소팅한 후에 상받는 사람의 수(k) 번째 점수를 구하면 됩니다.

루틴으로 구현하자면,
큰 점수부터 카운트하므로 점수목록을 내림차순으로 소팅하고, k번째 배열의 점수를 출력해 주면 됩니다.
내립차순으로 처리하기 위해, 소팅함수에 사용할 콜백함수를 작성했다. return a > b 로 리턴값을 주도록 작성하면 큰값이 앞쪽으로 위치하게 소팅된다.
code sol.
#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;
}
© 코드솔 - CodeSol. All Rights Reserved.