반응형
문제
2022 연세대학교 미래캠퍼스 슬기로운 코딩생활에 명의 학생들이 응시했다.
이들 중 점수가 가장 높은 명은 상을 받을 것이다. 이 때, 상을 받는 커트라인이 몇 점인지 구하라.
커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다.
입력
첫째 줄에는 응시자의 수 과 상을 받는 사람의 수 가 공백을 사이에 두고 주어진다.
둘째 줄에는 각 학생의 점수 가 공백을 사이에 두고 주어진다.
출력
상을 받는 커트라인을 출력하라.
구상
C언어에서 제공하는 내장 정렬 함수를 활용해보겠다.
C언어에 내장되어 있는 정렬 함수인 qsort()를 활용했다.
qsort()는 stdlib.h 헤더파일에 있다.
기본형:
void qsort(
void *base,
size_t number,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
base
는 대상 배열의 시작 부분으로 정렬하고 싶은 배열명을 입력한다. number
는 배열 크기로 sizeof(배열) / sizeof(자료형)
을 입력한다. width
는 배열 요소로 크기이다. sizeof(자료형)
을 입력한다. compare
는 각 요소를 비교하는 사용자 지정 함수를 만들어서 인자 없이 함수명만 입력한다.
qsort 함수를 이용하려면 compare
함수를 작성할 때 약속된 값을 반환해야 한다.
오름차순으로 정렬하고 싶다면 arg1
< arg2
일 때 음수를 반환하고,
내림차순일 때는 양수를 반환하면 된다.
int compare(const void* arg1, const void* arg2) {
int a = *(int*)arg1; //void를 int형으로 변환
int b = *(int*)arg2;
if (a < b) return 1; //내림차순 정렬
else if (a > b) return -1;
else return 0;
}
동점자 처리는 문제에서 명시하지 않았으니 처리하지 않아도 정답으로 인정한다.
코드
#include <stdio.h>
#include <stdlib.h>
//비교 수행하는 함수, qsort의 4번째 인자
int compare(const void* arg1, const void* arg2) {
int a = *(int*)arg1; //void를 int형으로 변환
int b = *(int*)arg2;
if (a < b) return 1; //내림차순 정렬
else if (a > b) return -1;
else return 0;
}
int main(void)
{
int arr[1000] = { 0 };
int sizeOfArr = sizeof(arr) / sizeof(int); //배열의 크기
int n, k, x;
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++) { //학생의 수만큼 반복
scanf("%d", &arr[i]);
}
qsort(arr, sizeof(arr) / sizeof(int), sizeof(int), compare); //정렬
printf("%d", arr[k - 1]); //배열은 0부터 시작하므로 1 빼서 출력
return 0;
}
반응형
'프로그래밍 > Baekjoon' 카테고리의 다른 글
[C언어] 백준 10989. 수 정렬하기 3 (0) | 2022.10.20 |
---|---|
[C언어] 백준 2475. 검증수 (0) | 2022.10.18 |
[C언어] 백준 25304. 영수증 (0) | 2022.10.14 |
[C언어] 백준 2480. 주사위 세개 (0) | 2022.10.12 |
[C언어] 백준 2525. 오븐 시계 (0) | 2022.10.10 |