23056번: 참가자 명단
첫째 줄에 학급 수인 $N$과 학급당 신청 가능한 인원수 $M$이 주어진다. ($N$은 짝수이고 $2\leq N \leq 10$, $1\leq M \leq 10$) 둘째 줄부터 신청된 순서대로 학생의 학급과 이름이 주어진다. 학생의 학급은
www.acmicpc.net
23056번 : 참가자 명단

백남이의 모교인 백준고등학교에서 체육대회를 개최하려 한다.
백남이는 학생들의 체육대회 신청을 관리하게 되었다.
체육대회는 1부터 N까지의 학급만 참여하며, 각 학급당 최대 M명까지 선착순으로 참가할 수 있다. 단, N은 짝수이다.
또한, 체육대회의 팀을 학급이 홀수일 때 청팀, 짝수일 때 백팀으로 나누기로 했다.
이에 따라 백남이는 체육대회 참가자 명단 프로그램을 제작하려 한다.
- 청팀을 먼저, 백팀을 나중에 출력한다.
- 각각의 팀에 대해 학급을 오름차순으로 출력한다.
- 각각의 학급에 대해 학생의 이름을 길이가 짧은 것부터, 길이가 같다면 사전 순으로 출력한다.
입력
첫째 줄에 학급 수인 N과 학급당 신청 가능한 인원수 M이 주어진다. (N은 짝수이고 2≤N≤10, 1≤M≤10)
둘째 줄부터 신청된 순서대로 학생의 학급과 이름이 주어진다. 학생의 학급은 N을 초과하지 않는다. 이름은 모두 소문자이며 15자를 초과하지 않는다.
학급과 이름이 동일한 학생은 존재하지 않는다.
신청할 수 있는 최대 학생 수는 500명이다.
입력의 마지막은 0 0으로 나타낸다.
출력
첫째 줄부터 백남이의 체육대회 참가자 명단 프로그램에 맞게 학생의 학급과 이름을 공백으로 구분하여 출력한다.

생각해 볼 점
정렬 문제입니다.
정렬을 구현해주는 것도 좋지만, 보통은 STL을 쓰는 것이 효율적이고 빠릅니다.
그리고 고급 정렬들은 구현이 꽤 까다롭습니다.
아무튼, STL을 활용한 정렬을 위해서 sorting 함수를 만들어줍니다.
문제의 조건에 맞게 학급을 우선, 그 후 이름을 사전순으로 정렬합니다.
정렬이 끝나면, 백기 팀부터 출력합니다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool sorting(pair<int, string> A, pair<int, string> B)
{
if(A.first != B.first) return A.first < B.first;
int A_len = A.second.length();
int B_len = B.second.length();
if(A_len != B_len) return A_len < B_len;
return A.second < B.second;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, M;
cin >> N >> M;
int cl;
string name;
cin >> cl >> name;
int *cnt = new int[N];
fill_n(cnt, N, 0);
vector<pair<int, string>> blue, white;
while(cl != 0 && name != "0")
{
cnt[cl - 1]++;
if(cnt[cl - 1] <= M)
{
if(cl % 2 == 1) blue.push_back({cl, name});
else white.push_back({cl, name});
}
cin >> cl >> name;
}
sort(blue.begin(), blue.end(), sorting);
sort(white.begin(), white.end(), sorting);
for(pair<int, string> p : blue) cout << p.first << " " << p.second << "\n";
for(pair<int, string> p : white) cout << p.first << " " << p.second << "\n";
return 0;
}
그 외
충남대학교 제 5회 생각하는 프로그래밍 대회 문제입니다.
제5회 생각하는 프로그래밍 대회 (acmicpc.net)
제5회 생각하는 프로그래밍 대회
www.acmicpc.net
'공부 및 정리 > 백준 코드' 카테고리의 다른 글
[C++]백준 - 9252번 문제 (0) | 2021.10.06 |
---|---|
[C++]백준 - 23057번 문제 (0) | 2021.10.06 |
[C++]백준 - 23055번 문제 (0) | 2021.10.05 |
[C++]백준 - 4195번 문제 (0) | 2021.10.04 |
[C++]백준 - 1976번 문제 (0) | 2021.10.04 |