본문 바로가기
Algorithm/C++

[백준 10814] 나이순 정렬

by imagineer_jinny 2022. 10. 4.

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

 

10814번: 나이순 정렬

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

www.acmicpc.net

 

배운 것

구조체로도 풀 수 있고 stable sort로도 풀 수 있고

stable_sort 

  • 원래의 순서를 손상시키지 않으면서 정렬하는것

출처: 하단 링크

 

tuple 원소값 하나씩 가져오기

출처: 하단 링크

 

 


내코드 - stable sort 버전

#include <bits/stdc++.h>
using namespace std;


bool cmp(pair<int,string> a, pair<int,string> b)
{
    return a.first<b.first;
    
}
int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  int N;
  cin >> N;
  
    vector<pair<int,string>> v;
   for(int i=0;i<N;i++)
   {
       int age;
       string name;
       cin>>age>>name;
       v.push_back({age,name});
   }
    
    stable_sort(v.begin(),v.end(),cmp);
        for(int i = 0; i < num; i++)
            cout << v[i].first << ' ' << v[i].second << '\n';
    
}

 

내코드 - tuple 버전

#include <bits/stdc++.h>
using namespace std;

bool cmp(tuple<int,int,string> a, tuple<int,int,string> b)
{
    int aage=get<0>(a);
    int bage=get<0>(b);
    if(aage!=bage)return aage<bage;
    
    int aidx=get<1>(a);
    int bidx=get<1>(b);
    return aidx<bidx;
    
}
int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  int N;
  cin >> N;
  vector<tuple<int, int, string>> members;
  for (int i = 0; i < N; i++) {
    int age;
    string name;
    cin >> age >> name;
    members.push_back({age, i, name});
  }
  sort(members.begin(), members.end(),cmp);
    
   for (auto [age, _, name] : members)
    cout << age << " " << name << '\n';
    

}

 

 


 

정답 코드 - stable sort 버전

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(pair<int,string> a, pair<int,string> b)
{
    return a.first < b.first;
}
int main() {
    int num;
    cin >> num;
    pair<int,string> tmp;
    vector<pair<int,string>> arr;
    for(int i = 0; i < num; i++)
    {
        cin >> tmp.first >> tmp.second;
        arr.push_back(tmp);
    }
    stable_sort(arr.begin(),arr.end(),compare);
    for(int i = 0; i < num; i++)
        cout << arr[i].first << ' ' << arr[i].second << '\n';
}

 

 

정답코드 - tuple 버전

 

// Authored by : heheHwang
// Co-authored by : -
// http://boj.kr/039530fbae654100939d10d8a7c10bd7
#include <bits/stdc++.h>
using namespace std;

int main(void) {
  ios::sync_with_stdio(0);
  cin.tie(0);

  int N;
  cin >> N;
  vector<tuple<int, int, string>> members;
  for (int i = 0; i < N; i++) {
    int age;
    string name;
    cin >> age >> name;
    members.push_back({age, i, name});
  }
  sort(members.begin(), members.end());
  for (auto [age, _, name] : members)
    cout << age << " " << name << '\n';
}

 

 

 

 

 

참고

[C++] tuple 사용법 & 예제 (tistory.com)

[백준] 10814 나이순 정렬 C++ (정렬) (velog.io)

[백준 / BOJ] - 10814번 나이순 정렬 C++ 풀이 :: Just Give Me The Code (tistory.com)

'Algorithm > C++' 카테고리의 다른 글

[백준 7795] 먹을 것인가 먹힐 것인가  (0) 2022.10.04
[백준 11656] 접미사 배열  (0) 2022.10.04
[백준 1181] 단어 정렬  (0) 2022.09.28
[백준 15663] N과 M(9)  (0) 2022.09.28
[백준 15657] N과 M (8)  (0) 2022.09.28

댓글