풀이
나이와 이름을 등록할 수 있는 구조체를 만들어 사용하자.
나이가 같을 경우 등록된 순서대로 출력을 해주어야 하기 때문에 다음과 같은 방법을 생각해 볼 수 있다.
- 구조체 내부에 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);
}
출처
'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 |