728x90
문제
https://www.acmicpc.net/problem/5635
문제 분석
학생의 수를 입력 받고 학생의 수에 맞춰 이름과 생일을 입력 받는다.
가장 나이가 어린 사람의 이름과 가장 나이가 적은 사람의 이름을 출력한다.
알고리즘 설계
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 |
댓글