본문 바로가기
ALGORITHM/C++ - 백준

[백준 5635] 생일

by DDongYeop 2023. 10. 19.
728x90

문제

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

 

5635번: 생일

어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.

www.acmicpc.net

 

 

문제 분석 

학생의 수를 입력 받고 학생의 수에 맞춰 이름과 생일을 입력 받는다. 

 

가장 나이가 어린 사람의 이름과 가장 나이가 적은 사람의 이름을 출력한다. 

 

 

알고리즘 설계 

priority_queue를 2개 만들어 오름차순으로 정렬되는 것과, 내림차순으로 정렬되는 것을 만든다. 

 

학생의 수를 입력 받아 반복문을 돌려주고 학생의 이름과 생일을 입력 받는다. 

 

 

19990101이 생일인 사람보다 20000101인 사람이 더 나이가 어린 것에서 착안하여 년도, 월, 일 순으로 배치하여 수가 가장 크다면 가장 어리고, 가장 적다면 적은 학생인 것이다. 

 

년도엔 10000, 월엔 100을 곱하여 자리수를 찾아주고 년, 월, 일을 다 더한 값을 이름과 함께 priority_queue에 넣어준다. 

 

이후 두 priority_queue의 top값 두개를 출력한다. 

 

 

코드

#include <iostream>
#include <queue>

using namespace std;

int main()
{
	priority_queue <pair<int, string>> pq1;
	priority_queue <pair<int, string>, vector<pair<int, string>>, greater<>> pq2;
	string str;
	int loop, input1, input2, input3, index = 0;

	cin >> loop;

	while (loop--)
	{
		cin >> str >> input1 >> input2 >> input3;
		index = input1;
		index += input2 * 100;
		index += input3 * 10000;
		pq1.push(make_pair(index, str));
		pq2.push(make_pair(index, str));
	}

	cout << pq1.top().second << '\n' << pq2.top().second;
}

굳이 priority_queue 두개를 만드는 것이 아니라 변수 2개를 만들어 사용하는 것이 더 효율적일거 같다. 

728x90

'ALGORITHM > C++ - 백준' 카테고리의 다른 글

[백준 7576] 토마토  (1) 2023.10.19
[백준 24446] 알고리즘 수업 - 너비 우선 탐색 3  (1) 2023.10.19
[백준 11047] 동전 0  (0) 2023.10.19
[백준 1991] 트리 순회  (0) 2023.10.19
[백준 5639] 이진 검색 트리  (0) 2023.10.18

댓글