컴굥일지
[BOJ/백준 13414][C++] 수강신청 본문
반응형
문제
https://www.acmicpc.net/problem/13414
문제 내용
어떤 수업의 수강신청 학번 목록을 받는다.
여러 번 클릭한 학생은 자신이 얻은 순서의 가장 마지막 순서를 가지게 된다.
k명 수강 가능하다고 할 때, 해당 수업을 들을 수 있는 학생의 학번을 출력하면 된다.
문제 풀이
unordered_map으로 (학번, 대기순서)를 저장했다.
이후 해당 내역을 {대기 순서, 학번}의 형식으로 vector에 저장한 뒤, 정렬을 진행했다.
k명 이내에 드는 학생들만 출력하면 된다.
코드
#include <algorithm>
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int k, L;
cin >> k >> L;
// 학번이 int면 00000000이 0으로 저장된다.
unordered_map<string, int> waiting_list; // 학번, 순서
int cnt = 0;
string studentId;
while (L--) {
cin >> studentId;
waiting_list[studentId] = cnt;
cnt++;
}
// 순서를 기준으로 정렬 후
vector<pair<int, string>> result_list; // 순서, 학번
for (auto student : waiting_list) {
result_list.push_back({student.second, student.first}); // 순서, 학번
}
sort(result_list.begin(), result_list.end());
// 수강신청 순서대로 k개 출력 (인원이 k명이 안 될 경우 인원 수 만큼만 출력)
for (int i = 0; i < k && i < result_list.size(); i++) {
cout << result_list[i].second << "\n";
}
}
문제 코드 설명
학번을 int로 받아버리면 00000000과 같은 학번이 0이 되어버린다.
따라서 학번은 string으로 받아야 한다.
반응형
'알고리즘 > 코테 문제' 카테고리의 다른 글
[BOJ/백준 19583][C++] 싸이버개강총회 (0) | 2023.08.13 |
---|---|
[BOJ/백준 16165][C++] 걸그룹 마스터 준석이 (0) | 2023.08.13 |
[BOJ/백준 17219][C++] 비밀번호 찾기 (0) | 2023.08.12 |
[BOJ/백준 21921][C++] 블로그 (0) | 2023.08.11 |
[BOJ/백준 1759][C++] 암호 만들기 (0) | 2023.08.09 |
Comments