728x90
https://www.acmicpc.net/problem/10814
문제해석
- 조건1. 나이가 다르면 나이순으로 정렬
- 조건2. 나이가 같으면 입력받은 순으로 정렬
한번에 여러 명의 정보를 입력,저장 할 때는 구조체를 사용하면 편리하여 구조체를 사용합니다 : struct
C에서 제공하는 정렬함수를 사용하여 나이와 입력받은 순으로 정렬해주고 이와 관련된 함수를 작성해줍니다
: 정렬함수 - qsort / qsort에서 사용할 비교함수 - cmp
회원의 수가 정해져 있지 않기 때문에 동적메모리를 할당하여 입력된 회원 수에 맞춰 정확한 크기의 메모리를 확보합니다
: malloc , free
소스코드 & 문제풀이
#include <stdio.h>
#include <stdlib.h> // qsort함수를 제공합니다
// 구조체(인덱스, 나이, 이름 포함)를 사용해 연관된 변수를 묶어줍니다
typedef struct member {
int index;
int age;
char name[101];
}member;
// qsort 함수에서 사용하기 위해 정의된 비교 함수
// 나이가 같으면인덱스를 비교하여 입력받은 순을 유지, 다르면 나이를 기준으로 비교합니다
int cmp(member* i, member* j) {
if (i->age == j->age) return i->index - j->index;
return i->age - j->age;
}
int main(void) {
int n;
scanf("%d", &n); // 회원 수 입력받습니다
// malloc을 사용하여 n명의 회원 정보를 담을 수 있는 메모리를 동적으로 할당합니다
member* arr = (member*)malloc(sizeof(member) * n);
//반복문을 통해 각 회원의 age와 name을 입력받고, index는 입력된 순서대로 자동으로 부여됩니다
for (int i = 0; i < n; i++) {
arr[i].index = i;
scanf("%d %s", &arr[i].age, arr[i].name);
}
// qsort는 함수를 이용하여 입력받은 정보를 조건대로 정렬합니다
qsort(arr, n, sizeof(member), cmp);
for (int i = 0; i < n; i++)
printf("%d %s\n", arr[i].age, arr[i].name);
free(arr); // 할당한 동적메모리를 반납합니다
}
예제 입출력 결과
728x90
'백준(BaekJoon)' 카테고리의 다른 글
[BaekJoon/C] No.25305 : 커트라인 (0) | 2024.08.20 |
---|---|
[BaekJoon/C] No.18870 : 좌표 압축 (0) | 2024.08.14 |
[BaekJoon/C] No.2941 : 크로아티아 알파벳 (0) | 2024.08.06 |
[BaekJoon/C] No.1157 : 단어 공부 (0) | 2024.08.06 |
[BaekJoon/C] No.24723 : 녹색거탑 (0) | 2024.07.30 |