본문 바로가기
C++ 코딩 문제 풀이/백준

[Baekjoon] 10814번: 나이순 정렬

by 섬댕이 2023. 6. 25.

 

 

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

 

10814번: 나이순 정렬

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

www.acmicpc.net

 


 

문제 해결 과정

착안

가입한 사람들의 정보를 구조체를 활용해 저장한 뒤 이를 배열로 저장하여 정렬하고자 하였다. 나이가 같은 경우, 가입한 순으로 정렬하기 위해 별도로 가입한 순서를 표시하기 위한 변수를 구조체에 포함하였다.

 

구현

STL의 <algorithm> 헤더에 포함된 std::sort() 함수를 사용하고, 정렬하는 기준을 람다 표현식(lambda expression)의 형태로 전달하여 구현하였다.

 

[스포 주의] 아래 '더보기'를 누르면 코드가 나오니 주의하세요~

더보기
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

struct Member
{
	string Name;
	int Age;
	int Index;
};

Member Members[100000];

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);

	int N;
	cin >> N;

	for (int i = 0; i < N; i++)
	{
		Members[i].Index = i;
		cin >> Members[i].Age >> Members[i].Name;
	}

	sort(&Members[0], &Members[N - 1] + 1,
		 [](const Member& A, const Member& B)
		 {
			 if (A.Age == B.Age)
				 return A.Index < B.Index;

			 return A.Age < B.Age;
		 });

	for (int i = 0; i < N; i++)
		cout << Members[i].Age << " " << Members[i].Name << "\n";

	return 0;
}

 

실행 결과

댓글