[Code Up] (3015) 성적표 출력 (stable_sort)
카테고리: CodeUp
태그: Coding Test Algorithm
C/C++로 풀이했습니다.
출처 : Code Up 문제 풀이. https://codeup.kr/
🚀 문제
세종이는 정보과학 선생님인 JH를 도와주기 위해 정보과학 성적처리 프로그램을 만들기로 했다.
JH 선생님은 학생들의 명단과 점수를 입력하면 상위 m명의 학생 명단을 출력해 주기를 원한다.
다음 조건을 만족하는 프로그램을 작성해 보자.
입력
첫째 줄에 데이터의 개수 n (3<=n<=100)과 출력인원 m (1<=m<=n)이 공백으로 구분되어 입력된다.
둘째 줄부터 학생 이름과 점수(0 100)가 공백으로 구분되어 입력된다.
단 이름의 길이는 최대 10바이트 이내이다.
출력
상위 m명의 학생명단을 출력한다.
단, 출력순서는 점수가 높은 학생이 먼저 출력되며, 점수가 같을 경우 입력 순서가 빠른 순서로 출력한다.
입력 예시
4 2
Jeon 95
Kim 59
Lee 90
Bae 100
출력 예시
Bae
Jeon
🚀 내 풀이 ⭕
#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
struct stu {
string name;
int score;
};
bool cmp(const stu& a, const stu& b) { return a.score > b.score; }
int main()
{
int n, m;
cin >> n;
cin >> m;
vector<stu> v(n);
for (int i = 0; i < n; ++i) {
cin >> v[i].name;
cin >> v[i].score;
}
stable_sort(v.begin(), v.end(), cmp);
for (int i = 0; i < m; ++i)
cout << v[i].name << '\n';
}
점수가 같으면 입력한 순서대로 정렬해야 하기 때문에 stable_sort
함수로 정렬하였다. stable_sort
는 값이 같은 두 원소를 정렬할 떈 그 입력 순서를 유지한다. 이와 달리 sort
는 두 원소 값이 같다면 랜덤하게 정렬한다. (즉, 입력 순서와 다를 수도 있다.)
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기