BOJ

(C) BOJ/백준 5635 - 생일

정영주 2021. 4. 2. 13:30

문제 출처 : 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;
}

요즘 배우고 있는 자료구조에서는 구조체 쓸 일이 많은데, 그전까지는 구조체 쓸 일이 별로 없어서 한번 써보았다.