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 |