PS/Baekjoon Online Judge

[백준 10814] 나이순 정렬 [C]

kimyoungrok 2021. 7. 13. 01:01

백준 - 10814


풀이

나이와 이름을 등록할 수 있는 구조체를 만들어 사용하자.

나이가 같을 경우 등록된 순서대로 출력을 해주어야 하기 때문에 다음과 같은 방법을 생각해 볼 수 있다.

  • 구조체 내부에 order변수를 선언해서 등록 순서를 입력
  • 조금은 복잡하지만 구조체 배열의 인덱스를 활용하여 메모리를 절약

 

등록순서 1 2 3 4 5 6 7 " "
나이 20 21 20 23 21 20 23 " "

하지만, 나이를 고려하지 않을 경우 이미 등록 순서는 오름차순으로 정렬되있다,

때문에 추가로 정렬을 해주지 않고, 가장 적은 나이에서 가장 많은 나이까지 분류를 하여 출력해주는 방식으로 해결했다.

 

등록순서 1 3 6
나이 20 20 20
등록순서 2 5
나이 21 21
등록순서 4 7
나이 23 23

 


소스코드

#include <stdio.h>
#include <stdlib.h>
typedef struct{
    char name[101];
    int age;
}Member;

int main(){
    int N, min, max;
    scanf("%d", &N);
    Member m[N];
    for (int i = 0; i < N; i++){
        scanf("%d %s", &m[i].age, m[i].name);
        if (!i)
            max = min = m[i].age;
        else if (min > m[i].age)
            min = m[i].age;
        else if (max < m[i].age)
            max = m[i].age;
    }
    for (int i = min; i <= max; i++)
        for (int j = 0; j < N; j++)
            if (m[j].age == i)
                printf("%d %s\n", m[j].age, m[j].name);
}

출처

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

 

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 10869] 사칙연산 [C]  (0) 2021.07.13
[백준 2164] 카드2 [C]  (0) 2021.07.13
[백준 10818] 최소, 최대 [C]  (0) 2021.07.13
[백준 10809] 알파벳 찾기 [C]  (0) 2021.07.13
[백준 9498] 시험 성적 [C]  (0) 2021.07.12