본문 바로가기
CODING

COS Pro 1급 C언어 모의고사 - 시험 점수 정렬

by snow_white 2023. 12. 17.

문제 설명

학생들의 이름과 시험 점수가 주어질 때, K 등을 한 학생의 이름을 찾으려 합니다(단, 시험 점수가 같은 학생은 없다고 가정 합니다). 이를 위해 다음과 같이 구조체를 정의했습니다.

typedef struct Student{
 char name[20];
 int score;
}Student;


또한 다음과 같이 프로그램 구조를 작성했습니다.

1. 학생의 이름과 시험 점수로 구성된 구조체 배열을 생성 및 초기화합니다.
2. 생성된 구조체 배열을 시험 점수의 내림차순으로 정렬합니다.
3. 정렬된 구조체 배열에서 K - 1번째에 있는 학생의 이름을 return 합니다.

 

학생들의 이름이 순서대로 들어있는 배열 names와 names의 길이 nameslen, 학생들의 시험 점수가 순서대로 들어있는 배열 scores와 scores의 길이 scoreslen, 등수를 나타내는 자연수 K가 매개변수로 주어질 때, K 등인 학생의 이름을 return 하도록 solution 함수를 작성하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸을 채워 전체 코드를 완성해주세요.

 

매개변수 설명

학생들의 이름이 순서대로 들어있는 배열 names와 names의 길이 nameslen, 학생들의 시험 점수가 순서대로 들어있는 배열 scores와 scores의 길이 scoreslen, 등수를 나타내는 자연수 K가 solution 함수의 매개변수로 주어집니다.

  • names는 학생들의 이름이 들어있는 배열입니다.
    • 모든 학생의 이름은 알파벳 소문자로만 이루어져 있고, 길이는 2 이상 15 이하입니다.
    • 이름이 같은 학생은 없습니다.
  • names_len은 5 이상 100 이하의 자연수입니다.
  • scores는 학생들의 시험 점수가 들어있는 배열입니다.
    • 시험 점수는 0 이상 100 이하의 정수이며, 동점자는 없습니다.
  • scores_len은 5 이상 100 이하의 자연수입니다.
  • nameslen과 scoreslen은 항상 같으며, i 번째 학생의 이름과 성적은 names[i]와 scores[i]에 들어있습니다.
  • K는 등수를 나타내며, 1 이상 전체 학생의 수 이하의 자연수입니다.

return 값 설명

K 등인 학생의 이름을 return 해주세요.


#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>

typedef struct Student{
    char name[20];
    int score;
}Student;

int compare(const void *a, const void * b){
    Student first = *(Student *)a;
    Student second = *(Student *)b;
    if(first.score > second.score)
        return -1;
    else if(first.score < second.score)
        return 1;
    else
        return 0;
}

char* solution(char* names[], int names_len, int scores[], int scores_len, int K) {
    int len = names_len;
    Student* students = (Student*)malloc(sizeof(Student)*len);
    for(int i = 0; i < len; ++i){
        strcpy(students[i].name, names[i]);
        students[i].score = scores[i];
    }
    
    qsort(students, len, sizeof(Student), compare);
    
    return students[K - 1].name;
}

 

댓글