728x90
▶문제 : 정렬 기준 (codeup.kr)
정렬 기준
정렬된 데이터를 번호, 수학, 정보 점수 순으로 각 줄에 하나씩 출력한다.
codeup.kr
▶코드 작성
#include <stdio.h>
#include <stdlib.h>
#define SWAP(x, y, type) { type temp; temp = x; x = y; y = temp; }
typedef struct{//학생 데이터 구조체
int id;
int math;
int info;
} STUDENT;
int main()
{
STUDENT *std, temp;
int n, max;
scanf("%d", &n);
std = (STUDENT *)malloc(sizeof(STUDENT) * n);//동적 할당
for (int i = 0; i < n; i++)
{
scanf("%d %d", &std[i].math, &std[i].info);//수학, 정보 점수
std[i].id = i + 1;//학생 번호
}
for (int i = 0; i < n - 1; i++)//선택 정렬
{
max = i;
for (int j = i + 1; j < n; j++)
{
if (std[max].math < std[j].math)//수학 점수가 높은 학생
{
max = j;
}
else if (std[max].math == std[j].math)//수학 점수 같을 때
{
if (std[max].info < std[j].info)//정보 점수가 높은 학생
{
max = j;
}
else if (std[max].info == std[j].info)//정보 점수 같을 때
{
if (std[max].id > std[j].id)//학생 번호가 높은 학생
{
max = j;
}
}
}
}
if (i != max)//제자리가 아닌 경우
{
SWAP(std[i], std[max], STUDENT);//바꾸기
}
}
for (int i = 0; i < n; i++)
{
printf("%d %d %d\n", std[i].id, std[i].math, std[i].info);
}
free(std);
return 0;
}
▶해석
학생 데이터를 입력할 구조체를 만든 후 구조체 포인터 std에 sizeof(STUDENT)*n만큼 동적 할당을 한다. 데이터를 입력 후 선택 정렬을 사용하여 수학 점수가 높은 학생을 우선으로 정렬하고 같다면 정보 점수가 높은 학생, 그것도 같다면 학생 번호가 우선인 학생부터 정렬하여 결과를 내보낸다.
728x90
'코드업(codeup) > C' 카테고리의 다른 글
| 코드업(codeup) 3701 : 파스칼 삼각형 C언어 (0) | 2021.12.26 |
|---|---|
| 코드업(codeup) 3020 : 기억력 테스트 4 C언어 (0) | 2021.12.26 |
| 코드업(codeup) 3014 : 정렬을 빠르게! C언어 (0) | 2021.12.12 |
| 코드업(codeup) 3002 : 기억력 테스트 3 C언어 (0) | 2021.12.11 |
| 코드업(codeup) 2033 : 사다리 게임 C언어 (0) | 2021.12.03 |
댓글