학생의 등수 구하기
문제 설명
학생들의 시험 점수가 주어졌을 때, n번 학생이 몇 등인지 구하려 합니다.
학번은 0번부터 시작하며, 시험 점수는 학번순으로 주어집니다.
예를 들어 학생 네 명의 시험 점수가 다음과 같은 경우
학생 번호 | 0번 | 1번 | 2번 | 3번 |
수학 점수 | 20 | 60 | 98 | 59 |
3번 학생은 3등을 했습니다.
이를 위해 다음과 같이 프로그램 구조를 작성했습니다.
1. n번 학생의 점수를 변수에 저장합니다.
2. 점수를 내림차순으로 정렬합니다.
3. 배열의 첫 번째 원소부터 마지막 원소까지 순회하면 n번 학생의 점수를 찾습니다.
4. 1번 단계에서 저장해둔 함수와 같은 점수를 찾으면 등수를 return 합니다.
학생들의 시험 점수가 번호순으로 들은 배열 scores와 scores의 길이 scores_len, 학번 n이 solution 함수의 매개변수로 주어질 때, n번 학생의 등수를 return 하도록 solution 함수를 작성하려 합니다.
위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, func_c 함수와 매개변수를 알맞게 채워주세요.
예시
scores | scores_len | n | result |
[20, 60, 98, 590 | 4 | 3 | 3 |
코드 해석 및 전체 코드
int solution(int scores[], int scores_len, int n) {
int score = func_c(scores, n);
func_b(scores, scores_len);
int answer = func_a(scores, scores_len, score);
return answer;
}
solution 함수의 흐름대로 함수 설명
func_c는 n번 학생의 점수를 변수에 저장하는 함수로, n이 3이므로 answer에는 3번 학생의 점수인 59점이 들어간다.
scores = {20, 60, 98, 59}로 학번이 0부터 시작하여 3번 학생은 끝 번호로 점수는 59점이다.
func_b는 점수를 내림차순으로 정렬하는 함수로, scores와 scores_len이 매개변수로 주어진다.
func_b에서 퀵 정렬을 사용하여 내림차순으로 정렬하고 있다.
qsort(arr, arr_len, sizeof(int), compare);
arr : 정렬하고자 하는 배열
arr_len : 배열의 길이
sizeof(int) : 배열에서 원소 하나의 크기
compare : 비교를 수행할 함수
퀵정렬 : 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬
매우 빠른 수행 속도로 정렬함.
func_a는 배열의 첫 번째 원소부터 마지막 원소까지 순회하여 n번 학생의 점수를 찾는 함수이다.
for 문) 0 ~ scores_len -1까지 반복
if 문) scores[rank]와 score가 같다면 rank + 1을 리턴한다.
정렬된 scores는 [98, 60, 59, 50]이다.
rank | scores[rank] == 59 | return |
0 | 98 != 59 | |
1 | 60 != 59 | |
2 | 59 == 59 | 3 |
59점은 배열 2번째에 있으므로 return 값은 2+1인 3이다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int compare(const void* a, const void* b) {
return (*(int*)b - *(int*)a);
}
int func_a(int scores[], int scores_len, int score) {
for (int rank = 0; rank < scores_len; rank++)
if (scores[rank] == score)
return rank + 1;
return 0;
}
void func_b(int arr[], int arr_len) {
qsort(arr, arr_len, sizeof(int), compare);
}
int func_c(int arr[], int n) {
return arr[n];
}
int solution(int scores[], int scores_len, int n) {
int score = func_c(scores, n);
func_b(scores, scores_len);
int answer = func_a(scores, scores_len, score);
return answer;
}
int main() {
int scores[4] = { 20, 60, 98, 59 };
int scores_len = 4;
int n = 3;
int ret = solution(scores, scores_len, n);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}
구름 goormedu COS PRO 2급 기출문제 - C언어
[3차] 문제1) 학생의 등수 구하기
'코딩 테스트 > [c언어] cos pro 2급 기출문제' 카테고리의 다른 글
[No.23] 체조 선수의 점수 구해주기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.14 |
---|---|
[No.22] 장학생 수 구하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.13 |
[No.20] 상품권 총 지급액 구하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.12 |
[No.19] 투표에 대한 후보 찾기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.12 |
[No.18] 소수의 개수 구하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.11 |
댓글