(C++) 백준 10814번 - 나이순 정렬

코딩너구리·2025년 10월 29일

코딩 문제 풀이

목록 보기
57/266

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

문제

> 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다.
> 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성해라.

접근

나이와, 이름이 주어졌으므로 map으로 묶어서 회원을 저장하고 나이에 대해선 오름차순, 같다면 가입한 순서로 정렬한다.

문제해결

> 입력으로 들어온 나이와 이름을 쌍(pair)으로 입력받아 벡터에 저장한다. 그러면 나이가 같을 때 가입 순서로 인덱스를 통해 정렬하면된다.
> 정렬을 하는데 나이가 같을 때의 조건이 필요하므로 sort의 세번째 파라미터 를 정의해준다. 
> alghorithm 헤더에 있는 stable_sort를 사용하기 때문에 정렬 조건 함수에서 자동으로 인덱스순으로 정렬이 유지되므로 나이의 크기만 비교하면 된다.
> 해당 조건으로 stable_sort하면 입력순서는 자동으로 유지를 해주기 때문에 나이가 다를 때를 기준으로 정렬하다 나이가 같다면 조건으로인해 입력순서별로 정렬된다. 

코드

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;

bool comp(pair<int, string> a, pair<int, string> b)
{
	return a.first < b.first;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int N;
	cin >> N;
	
	vector<pair<int, string>> judge(N);
	for (int i = 0; i < N; i++) cin >> judge[i].first >> judge[i].second;

	stable_sort(judge.begin(), judge.end(), comp);

	for (auto j : judge)
		cout << j.first<< " " << j.second << '\n';
}

후기

처음에 map을 써서 인덱스를 key로, 입력정보를 쌍으로 value로 받아서 했는데 정렬부분에서 막혀 여러 방법을 시도했지만 할 수 없었다. 그래서 stable_sort를 새로 공부하게 되었다. 별 다른 선언이나 조건없이 입력순서는 자동으로 유지해주며 다른 조건에 따라 정렬할 수 있게 해준다. 딱 이문제를 위한 방법이었다. 너무 편했다.

0개의 댓글