백준(BaekJoon)

[BaekJoon/C] No.10814 : 나이순 정렬

ekdnjs510 2024. 8. 14. 14:01
728x90

https://www.acmicpc.net/problem/10814

No.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