모범생(정렬)

exsoul·2022년 6월 15일
0

문제 설명


N명의 점수가 주어질 때 상위 3명의 ID를 출력하는 프로그램을 작성하시오.

입력 설명


첫 줄에 학생 수 N(3≤N≤30,000)이 주어진다.
둘째 줄에는 N개의 점수가 공백으로 구분되어 ID 순으로 주어진다. (각 점수는 0 이상 10억 이하)
맨 먼저 입력된 점수는 ID가 1인 학생의 점수이고, 이후부터 순서대로 ID가 1씩 증가한다.

출력 설명


점수가 가장 높은 학생의 ID 3개를 순서대로 출력한다.
만일 점수가 같은 경우는 ID가 작은 학생을 선택한다.

입력 예시


8
70 30 70 40 60 50 90 80

#include <stdio.h>
#include <stdlib.h>
#define MAXN ((int)3e4)
int N;//자료 개수
struct ST{
    int id, score;//아이디, 점수
};
struct ST A[MAXN + 10];//자료
 
void simplesort(int s, int e){
    for (int i=s; i<s+3; i++){
        for (int j=i+1; j<=e; j++){
            if ((A[i].score < A[j].score) ||
                ((A[i].score == A[j].score) && (A[i].id > A[j].id))) {
                    struct ST temp = A[i];
                    A[i] = A[j];
                    A[j] = temp;
            }
        }
    }
}
 
int comp(const void *a, const void *b){
    struct ST *x = (struct ST *)a;
    struct ST *y = (struct ST *)b;
    if (x->score == y->score) return x->id - y->id;
    return y->score - x->score;
}
 
void InputData(void){
    scanf("%d", &N);
    for (int i = 0; i < N; i++) {
        scanf("%d", &A[i].score);
        A[i].id = i+1;
    }
}
 
void OutputData(void) {
    for (int i = 0; i < 3; i++) {
        printf("%d ", A[i].id);
    }
    printf("\n");
}
 
int main(void) {
    InputData();
    simplesort(0, N-1);
    //qsort(A, N, sizeof(A[0]), comp);
    OutputData();
    return 0;
}
profile
ocho

0개의 댓글