문제 출처 : BOJ 5635 - 생일 www.acmicpc.net/problem/5635
여러 사람들의 이름, 생년월일을 받고 가장 나이가 적은 사람과 가장 나이가 많은 사람의 이름을 출력하는 문제이다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
int n, d[100], m[100], y[100],
max = 0, min = 2011, maxindex, minindex;
char name[100][16];
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%s %d %d %d", name[i], &d[i], &m[i], &y[i]);
for (int i = 0; i < n; i++) {
if (max < y[i]) {
max = y[i]; maxindex = i;
}
else if (max == y[i]) {
if (m[maxindex] < m[i]) maxindex = i;
else if (m[maxindex] == y[i]) {
if (d[maxindex] < d[i]) maxindex = i;
}
}
if (min > y[i]) {
min = y[i]; minindex = i;
}
else if (min == y[i]) {
if (m[minindex] > m[i]) minindex = i;
else if (m[minindex] == y[i]) {
if (d[minindex] > d[i]) minindex = i;
}
}
}
printf("%s\n%s\n", name[maxindex], name[minindex]);
return 0;
}
swap() 함수를 이용해서 정렬을 한 후에 출력하는 방식을 생각해봤는데,
4개의 배열을 일일이 바꿔주면 시간도 너무 많이 걸리고 코드도 길어질 것 같아서
index를 저장해서 이름을 출력해보기로 했다.
이름, 일, 월, 년도를 각각 받은 후에, 년도, 월, 일 순으로 크기를 비교하고,
해당하는 인덱스의 이름을 출력하는 방식으로 풀었다.
처음에는 이름, 일, 월, 년도를 따로 선언해서 문제를 풀었는데,
구조체를 써먹어도 될 것 같다는 생각이 들어서 구조체를 이용해 보았다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
typedef struct birthday {
char name[16];
int date;
int month;
int year;
} birthday;
int main() {
int n, max = 0, min = 2011, maxindex, minindex;
birthday arr[100];
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%s %d %d %d", arr[i].name, &arr[i].date, &arr[i].month, &arr[i].year);
for (int i = 0; i < n; i++) {
if (max < arr[i].year) {
max = arr[i].year; maxindex = i;
}
else if (max == arr[i].year) {
if (arr[maxindex].month < arr[i].month) maxindex = i;
else if (arr[maxindex].month == arr[i].month) {
if (arr[maxindex].date < arr[i].date) maxindex = i;
}
}
if (min > arr[i].year) {
min = arr[i].year; minindex = i;
}
else if (min == arr[i].year) {
if (arr[minindex].month > arr[i].month) minindex = i;
else if (arr[minindex].month == arr[i].month) {
if (arr[minindex].date > arr[i].date) minindex = i;
}
}
}
printf("%s\n%s\n", arr[maxindex].name, arr[minindex].name);
return 0;
}
요즘 배우고 있는 자료구조에서는 구조체 쓸 일이 많은데, 그전까지는 구조체 쓸 일이 별로 없어서 한번 써보았다.
'BOJ' 카테고리의 다른 글
(C++) BOJ/백준 3986 - 좋은 단어 (0) | 2021.04.03 |
---|---|
(C++) BOJ/백준 2609 - 최대공약수와 최소공배수 (0) | 2021.04.03 |
(C) BOJ/백준 11098 - 첼시를 도와줘! (0) | 2021.04.01 |
(C) BOJ/백준 15904 - UCPC는 무엇의 약자일까? (0) | 2021.03.31 |
(C++) BOJ/백준 1008 - A/B (0) | 2021.03.28 |