본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.21] 학생의 등수 구하기 / cos pro 2급 c언어 기출 문제

by M개발자 2021. 5. 13.
반응형

학생의 등수 구하기


문제 설명

 

학생들의 시험 점수가 주어졌을 때, 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_cn번 학생의 점수를 변수에 저장하는 함수로, 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);
}

cos pro 2급 기출문제

github

 

구름 goormedu COS PRO 2급 기출문제 - C언어

 

[3차] 문제1) 학생의 등수 구하기

반응형

댓글