알고리즘 공부/CodeUp 문제풀이

코드업 3015:성적표 출력(C)

티들 2023. 9. 27. 23:34

문제 설명

 

세종이는 정보과학 선생님인 JH를 도와주기 위해 정보과학 성적처리 프로그램을 만들기로 했다.

JH 선생님은 학생들의 명단과 점수를 입력하면 상위 m명의 학생 명단을 출력해 주기를 원한다.

다음 조건을 만족하는 프로그램을 작성해 보자.

 

입력

첫째 줄에 데이터의 개수 n(3<=n<=100)과 출력인원 m(1<=m<=n)이 공백으로 구분되어 입력된다.

둘째 줄부터 학생 이름과 점수(0 100)가 공백으로 구분되어 입력된다. 

단 이름의 길이는 최대 10바이트 이내이다.

 

출력

상위 m명의 학생명단을 출력한다.

단, 출력순서는 점수가 높은 학생이 먼저 출력되며, 점수가 같을 경우 입력 순서가 빠른 순서로 출력한다.

 

입력 예시

4 2

Jeon 95

Kim 59

Lee 90

Bae 100

 

출력 예시

Bae

Jeon

 

나의 코드

#include <stdio.h>

typedef struct student	// 구조체
{
    char name[10];
    int score;
    int num;
} STUDENT;

int main()
{
    int i, j, n, m;
    STUDENT stude[100];	// 구조체 선언

    scanf("%d %d", &n, &m);	// n, m 입력받음

    for (i =0;i<n;i++)	// n번 입력 받음
    {
        scanf("%s %d", stude[i].name, &stude[i].score);
        stude[i].num = i;	// 입력 받은 순서
    }
    for (i=0;i<n-1;i++)
    {
        for (j=i+1;j<n;j++)
        {
            if (stude[i].score < stude[j].score ||
                (stude[i].score == stude[j].score && stude[i].num > stude[j].num))
            {
                STUDENT temp = stude[i];	// 점수나 순서에 따라 배열 순서 변경
                stude[i] = stude[j];
                stude[j] = temp;
            }
        }
    }

    for (i=0;i<m;i++)
    {
        printf("%s\n", stude[i].name);	// 출력
    }

    return 0;
}

 

문제 바로가기: https://codeup.kr/problem.php?id=3015&rid=0