[백준] 10814번: 나이순 정렬

2025. 1. 6. 13:50·PS

 


 

문제

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

 

 

개념

정렬

 

 

실행 결과

 

 

 

 

 

구현 코드(c++)

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

// 정렬 기준 - 나이 오름차순
bool comp(const pair<int, string>& a, const pair<int, string>& b) {
  return a.first < b.first;
}

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

  int n;
  cin >> n;
  vector<pair<int, string>> arr(n);

  for (int i = 0; i < n; i++) {
    cin >> arr[i].first >> arr[i].second;
  }

  // 안정적인 정렬 사용
  stable_sort(arr.begin(), arr.end(), comp);

  for (const auto& member : arr) {
    cout << member.first << " " << member.second << "\n";
  }

  return 0;
}

 

 

 

 

코드 설명

먼저 나는 일반 sort 함수를 사용했다가 틀린 문제임을 밝힌다.

그러면 이 문제에서 왜 sort가 아니라 stable sort를 사용해야 할까?

 

stable sort란?

 

이름 그대로 안정적인 정렬로, c++의 표준 라이브러리로 제공된다.

이는 정렬 기준이 동일한 원소들끼리 입력에서의 상대적인 순서를 보장하는 정렬이다.

 

문제에서 주어진 조건에서 나이가 같으면 가입한 순으로 이름을 출력해야 한다고 한다.

즉, pair<int, string>에소 int는 오름차순, string은 입력 순으로 정렬해야 하는 것이다.

만약 일반적인 sort를 사용한다면 int가 같은 경우 정렬 기준이 동일하므로, 뒤에 있는 string에 대한 상대적인 순서를 보장할 수 없다.

따라서 이를 보장하기 위해 가입순서와 같은 정렬 기준이 필요할때는 stable sort를 사용한다.

 

안정 적렬에는 insert, merge, bubble 등의 종류가 있다. 

algorithm 헤더의 stable sort는 merge sort를 기반으로 한다.

따라서 나는 comp 함수로 나이순 오름차순을 선언하고, stable sort로 가입순서를 보장하도록 설계했다.

 

 

 

 


 

참고 자료 

https://www.baeldung.com/cs/stable-sorting-algorithms

 

C++ 레퍼런스 - std::stable_sort (<algorithm>)

모두의 코드 C++ 레퍼런스 - std::stable_sort ( ) 작성일 : 2020-12-06 이 글은 6575 번 읽혔습니다. 범위 내의 원소들의 오름 차순 (크기가 작은 것에서 큰 순으로) 안정 정렬을 수행한다 참고로 안정 정렬

modoocode.com

 

저작자표시 (새창열림)

'PS' 카테고리의 다른 글

[백준] 15926번: 현욱은 괄호왕이야!! (JavaScript)  (0) 2025.02.16
[백준] 1914번 - 하노이 탑 (JavaScript)  (0) 2025.02.12
[코드트리] 선두를 지켜라  (0) 2025.01.03
[백준] 9935번: 문자열 폭발  (0) 2024.12.22
[백준] 2667번: 단지번호붙이기  (0) 2024.12.13
'PS' 카테고리의 다른 글
  • [백준] 15926번: 현욱은 괄호왕이야!! (JavaScript)
  • [백준] 1914번 - 하노이 탑 (JavaScript)
  • [코드트리] 선두를 지켜라
  • [백준] 9935번: 문자열 폭발
abyss-s
abyss-s
프론트엔드 공부합니다.
  • abyss-s
    abyss-s의 블로그입니다.
    abyss-s
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • Web (16)
        • JavaScript (6)
        • TypeScript (1)
        • React (5)
        • Vue (0)
        • Storybook (1)
        • Next.js (1)
      • Backend & Infra (8)
        • Database (3)
        • Node.js (2)
        • SpringBoot (1)
      • PS (71)
      • CS (30)
        • OS (13)
        • Structure & Algorithm (5)
        • Network (10)
        • 정보처리기사 (2)
      • Language (18)
        • OOP (1)
        • JAVA (13)
        • C++ (4)
      • Activities (12)
        • 멋쟁이 사자처럼 (2)
        • OSSCA (3)
        • LG U+ URECA (3)
        • Project (2)
      • AI (0)
      • Git & Github (5)
      • Notion (1)
      • IT (4)
      • Statistics (11)
      • Book (4)
      • Diary (1)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 백준
    • 트위터
  • 공지사항

    • abyss-s의 티스토리에 오신 것을 환영합니다.
  • 인기 글

  • 태그

    자바스크립트
    BAEKJOON
    운영체제
    네트워크
    Python
    DP
    C++
    생활코딩
    BFS
    코드트리
    통계학
    github
    백준
    파이썬
    그리디
    Java
    OS
    자바기반응용프로그래밍
    JavaScript
    React
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
abyss-s
[백준] 10814번: 나이순 정렬
상단으로

티스토리툴바