Priceless
[백준] 13414번: 수강신청 (C++) 본문

list와 map 라이브러리를 불러온 후 작성한다
list의 동적 할당을 위해 크기를 미리 선언하지 않는다
미리 선언하면 end 접근할 때 0으로 모두 초기화되어
원하지 않은 출력 값이 나타날 수 있다
우선 학번을 입력 받기 위한 list인 student를 선언한다
그리고 student의 iterator를 매핑하는 map인 student_map을 선언한다
반복문에서 학번을 한 명씩 입력 받은 후
반복자 iter를 초기화한다
map을 통해 입력 받은 학번이 이미 수강신청을 했는지 확인한 후
이미 수강신청을 했다면 기존 수강신청 정보를 지운다
이후 입력 받은 수강신청 정보를 list 와 map 뒤에 추가한다
이후 정렬된 코드를 수강신청 제한 인원에 맞게 list를 자른 후
출력 형식을 조절하여 출력한다
- int input; cin >> input;: 먼저, 학생 번호를 입력받습니다. 이 학생이 수강을 신청하는 학생입니다.
- auto iter = student.end();: student 리스트의 끝을 가리키는 반복자 iter를 생성합니다. 처음에는 이 학생이 student 리스트의 끝에 위치한 것으로 가정합니다.
- if (student_map.find(input) != student_map.end()): 학생 번호인 input이 이미 student_map에 존재하는지 확인합니다. 존재한다면, 해당 학생은 이미 수강을 신청한 상태입니다.
- student.erase(student_map.find(input)->second);와 student_map.erase(input);: 이미 수강한 학생을 다시 수강한 경우를 처리합니다. student_map에서 해당 학생의 위치를 찾아서 student 리스트에서 삭제하고, 그 학생의 정보를 student_map에서도 삭제합니다.
- student.push_back(input);: 수강을 신청한 학생을 student 리스트의 맨 뒤에 추가합니다.
- student_map.insert({input, --iter});: 새로운 학생 정보를 student_map에 추가합니다. 이때, --iter를 사용하여 student 리스트의 맨 뒤에 추가되었으므로, 이 학생을 가리키는 반복자를 student_map에 매핑합니다.
// baekjoon 13414
#include<iostream>
#include<list>
#include<map>
using namespace std;
// codes for fast I/O
void init(){
cin.tie(0);
cout.tie(0);
ios_base::sync_with_stdio(false);
}
using namespace std;
list<int> student;
int main(){
int N, K;
cin >> N >> K;
map<int, list<int>::iterator> student_map;
while(K--){
int input;
cin >> input;
auto iter = student.end();
if (student_map.find(input) != student_map.end()) {
student.erase(student_map.find(input)->second);
student_map.erase(input);
}
student.push_back(input);
student_map.insert({input, --iter});
}
if(student.size() > N){
student.resize(N);
}
for(auto i = student.begin(); i != student.end(); i++){
cout.width(8);
cout.fill('0');
cout << *i << '\n';
}
}
'Algorithm & Test > 백준' 카테고리의 다른 글
[백준] 15486번: 퇴사 2 (C++) (0) | 2023.09.17 |
---|---|
[백준] 2293번: 동전 1 (C++) (0) | 2023.09.16 |
[백준] 9465번: 스티커 (C++) (0) | 2023.09.14 |
[백준] 11053번: 가장 긴 증가하는 부분 수열 (C++) (0) | 2023.09.13 |
[백준] 9466번: 텀 프로젝트 (C++) (0) | 2023.09.11 |