Post List

[BOJ] 백준 10814 나이순 정렬

[BOJ] 백준 10814 나이순 정렬



이 문제는 자료구조 중 map과 vector를 사용하여 풀었습니다.
입력으로 나이와 이름이 주어지는데, 출력으로는 1. 나이순, 2. 나이가 같으면 가입순으로 출력을 해야 합니다. 따라서 정렬 또한 나이순, 그리고 가입순으로 정렬을 해야 합니다.
이를 위해, 2차원벡터에 나이와 가입순서를, 그리고 map에 가입순서와 이름을 저장한 후
벡터를 오름차순으로 정렬한 후 나이순으로 출력하되, 같은 나이일 경우 또 정렬되어있는 가입순서에 맞는 이름을 출력해주면 되는 문제 입니다.

소스코드 :


#include 
#include 
#include 
#include 
#include 
using namespace std;

int main() {
 ios_base::sync_with_stdio(0);
 cin.tie(0);
 int n;
 cin >> n;
        // 가입 순서와 이름 쌍을 저장할 map m 선언.
 map m;
        // 나이와 가입순서를 저장할 2차원 벡터 선언.
 vector< vector > v(n, vector(2));
 for (int i = 0; i < n; i++) {
  int q;
  cin >> q;
  string s;
  getline(cin, s);
                // 맵에 유일한 키 값인 가입순서, 그리고 이름을 넣는다.
  m.insert(pair{i, s});
                // 벡터에 나이와 가입순서를 넣는다.
  v[i][0] = q;
  v[i][1] = i;
 }
        // sort 함수로 나이순 정렬하되 같은 나이면 가입순서로 정렬하도록 한다.
 sort(v.begin(), v.end());
 for (int i = 0; i < n; i++) {
                // 순서대로 나이, 그리고 가입순서에 맞는 이름 출력
  cout << v[i][0] << m.find(v[i][1])->second << '\n';
 }

}

댓글