Coding/코딩테스트
#13414 수강신청
서머스
2020. 10. 29. 20:25
13414번: 수강신청
입력 데이터는 표준 입력을 사용한다. 입력은 1개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 과목의 수강 가능 인원 K(1 ≤ K ≤ 100,000)와 학생들이 버튼을 클릭한 순서를 기록한 대기목
www.acmicpc.net
국민대 수강신청 문제!
- 수강신청 버튼이 활성화 된 후, 수강신청 버튼을 조금이라도 빨리 누른 학생이 대기목록에 먼저 들어간다.
- 이미 대기열에 들어가 있는 상태에서 다시 수강신청 버튼을 누를 경우 대기목록의 맨 뒤로 밀려난다.
- 잠시 후 수강신청 버튼이 비활성화 되면, 대기목록에서 가장 앞에 있는 학생부터 자동으로 수강신청이 완료되며, 수강 가능 인원이 꽉 찰 경우 나머지 대기목록은 무시하고 수강신청을 종료한다.
* 유의점
- 시간초과
나는 한 10번...^^;정도 떠서 망연자실 했었는데, 다른 분들 질문한 걸 통해 cin, cout이 처리 속도가 느리다는 걸 알게되었다. 그래서 scanf랑 printf로 고침
- 반례
입력값이 000000 일때
여기서 유의해야할 점은 1. 0이 아니고 000000이 출력되도록 하는 것 2. 3명제한인데 1~2명 들어왔을 때 를 처리할 줄 알아야 한다.
----------
1. 일단 map 으로 변수를 선언한다. key는 학번, value는 클릭 순위가 되도록 한다.
왜냐? map은 key가 중복되면 삭제시키기 때문에. 근데 이건 어떻게 코딩하느냐에 따라 덮어씌워지는 방식이 달라지더라.
2. 이 map을 vector에 옮긴다. 안에 타입은 pair로 학번, 클릭 순위를 넣는데, 대신 map과 반대로 <클릭 순위, 학번> 이 되도록 넣는다. 왜냐하면 클릭 순위대로 sort를 해야 하기 때문에.
3. 3개(가 아니더라도 아무튼 한정값)까지만 출력한다..... 근데, 만약에 클릭한 학번 개수가 3개보다 작을 수 있으니까, for문에 or 조건으로 클릭 개수도 넣는다.