본문 바로가기

cospro2급/cospro_3차

2021-05-13

cospro 2급 1번 문제

학생의 등수 구하기

 

문제 설명

학생들의 시험 점수가 주어졌을 때, n번 학생이 몇 등인지 구하려 한다.

학번은 0번부터 시작하며, 시험 점수는 학번순으로 주어진다.

 

예를 들어 학생 네 명의 시험 점수가 다음과 같은 경우

3번 학생은 3등을 했다.

이를 위해 다음과 같이 프로그램 구조를 작성했다.

   1. n번 학생의 점수를 변수에 저장한다.

   2. 점수를 내림차순으로 정렬한다.

   3. 배열의 첫 번째 원소부터 마지막 원소까지 순회하며 n번 학생의 점수를 찾습니다.

   4. 1번 단계에서 저장해둔 점수와 같은 점수를 찾으면 등수를 return 한다.

 

학생들의 시험 점수가 번호순으로 들은 배열 scores와 scores의 길이 scores_len, 학번 n이 solution 함수의 매개변수로 주어질 때, n번 학생의 등수를 return 하도록 solution 함수를 완성한다.

 

매개변수 설명

학생들의 시험 점수가 번호순으로 들은 배열 scores와 scores의 길이 scores_len, 학번 n이 solution 함수의 매개변수로 주어진다.

   scores_len은 1 이상 100 이하이다.

   점수는 0점 이상 100점 이하이며 동점자는 없다.

   n은 0 이상 (scores의 길이 -1) 이하의 정수이다.

 

return 값 설명

n번 학생의 등수를 return 한다.

 

예시

 

예시설명

   3번 학생의 점수는 59점이다. 

   점수를 내림차순으로 정렬하면 [98, 60, 59, 20]이다.

   정렬된 점수에서 59는 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) {	//학번이 n인 학생의 등수 값 구하기
    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) { 	//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);
}

 

 

'cospro2급 > cospro_3차' 카테고리의 다른 글

2021-05-16  (0) 2021.05.16
2021-05-15  (0) 2021.05.15
2021-05-15  (0) 2021.05.15
2021-05-14  (0) 2021.05.14
2021-05-13  (0) 2021.05.13