본문 바로가기

algorithm/백준알고리즘

[백준알고리즘] 10814번: 나이순 정렬 -C++

728x90

[백준알고리즘] 10814번: 나이순 정렬 -C++

10814번: 나이순 정렬 (acmicpc.net)

 

10814번: 나이순 정렬

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

www.acmicpc.net

'1181번 단어 정렬'과 마찬가지로 두 가지 값을 동시에 비교해야 한다.

1181번 문제에 대한 풀이는 아래 링크에 있다.

[백준알고리즘] 1181번: 단어 정렬 -C++ (tistory.com)

 

[백준알고리즘] 1181번: 단어 정렬 -C++

[백준알고리즘] 1181번: 단어 정렬 -C++ 1181번: 단어 정렬 (acmicpc.net) 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진

suri78.tistory.com

 

이번 10814번 문제에서도 마찬가지로 intstring으로 구성된 pair가 존재한다.

 

그리고 sort 함수를 이용해줬는데, 이번에는 모든 원소를 비교하는 단순한 오름차순 정렬이 아닌 나이와 가입한 순서에 대한 오름차순 정렬이기 때문에 less<>greater<>가 아닌 새롭게 compare라는 비교 함수를 만들어주었다.

 

비교 함수에서는 가입한 순서는 고려하지 않았고, 문자열의 길이에 대해서만 정렬을 해주었다.

 

기본적으로 swap한 결과는 같은 값이라면 작은 인덱스의 값과 큰 인덱스의 값의 순서는 유지가 되기 때문이다. 

 


아래는 C++ 코드다.

#include <iostream>
#include <algorithm>
#include <vector>

void solve(void);

int main(void)
{
	std::ios::sync_with_stdio(false);
	std::cin.tie(NULL);

	solve();
}

bool compare(std::pair<int, std::string> a, std::pair<int, std::string> b)
{
	return a.first < b.first;
}

void solve(void)
{
	int n;
	std::cin >> n;

	std::vector<std::pair<int, std::string>> members;
	for (int i = 0; i < n; i++)
	{
		int age; std::string name;
		std::cin >> age >> name;
		members.push_back(std::make_pair(age, name));
	}

	std::sort(members.begin(), members.end(), compare);

	for (int i = 0; i < n; i++)
		std::cout << members[i].first << " " << members[i].second << '\n';
}

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90