[백준] 10814번. 나이순 정렬 (C++)
문제 설명
https://www.acmicpc.net/problem/10814
10814번: 나이순 정렬
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을
www.acmicpc.net
해결 방향
구조체를 이용하여 구현했다.
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct Person { int age; string name; int order; };
bool compare(Person& p1,Person& p2)
{
if (p1.age == p2.age) { return p1.order < p2.order; }
else { return p1.age < p2.age; }
}
int main() {
int N;
cin >> N;
vector<Person> people(N);
for (int i = 0; i < N; i++)
{
cin >> people[i].age >> people[i].name;
people[i].order = i;
}
sort(people.begin(), people.end(), compare);
for (Person& p:people)
{
cout << p.age <<" " << p.name<<"\n";
}
}
struct Person { int age; string name; int order; };
Person 구조체를 만든다. 나이, 이름, 입력된 순서 변수를 넣어준다.
bool compare(Person& p1,Person& p2)
{
if (p1.age == p2.age) { return p1.order < p2.order; }
else { return p1.age < p2.age; }
}
compare 함수를 기준으로 배열을 정렬할 것이다.
sort의 비교 기준이 될 함수는
두개의 인자를 받아서
첫번째 인자 < 두번째 인자 → true를 반환
반대의 경우 false를 반환해야한다.
vector<Person> people(N);
Person구조체 배열 people을 만들었다. 크기는 N이다.
for (int i = 0; i < N; i++)
{
cin >> people[i].age >> people[i].name;
people[i].order = i;
}
구조체의 나이 이름을 입력받
order에 입력받은 순서대로 수를 지정해준다.
sort(people.begin(), people.end(), compare);
compare함수를 기준으로 people 배열을 정렬한다.
for (Person& p:people)
{ cout << p.age <<" " << p.name<<"\n"; }
for-each문법으로 출력해주었다.
for(변수 : 배열 혹은 벡터)
배열 혹은 벡터의 값들을 차례로 변수에 담는다. 그리고 그 변수를 출력하는 것이다.