차곡차곡

[BOJ/Python] 백준 13414번 - 수강신청 본문

CS/Algorithm

[BOJ/Python] 백준 13414번 - 수강신청

sohy 2022. 7. 15. 02:14

백준 #13414 수강신청

 

13414번: 수강신청

입력 데이터는 표준 입력을 사용한다. 입력은 1개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 과목의 수강 가능 인원 K(1 ≤ K ≤ 100,000)와 학생들이 버튼을 클릭한 순서를 기록한 대기목

www.acmicpc.net

import sys
input = sys.stdin.readline

k, l = map(int, input().split())   # k: 수강 가능 인원, l: 대기 목록 길이
dict = {}
for i in range(l):
  dict[input().strip()] = i

sorted_dict = sorted(dict.items(), key=lambda x: x[1])

for i in range(k):
  if i < len(sorted_dict):
    print(sorted_dict[i][0])
  else:
    break
  1. 딕셔너리로 신청자 대기 목록을 만든다.
  2. key 값을 학번으로 하고 value 값을 for문의 제어변수로 하여 각 학번마다 들어온 순서가 저장되도록 한다. 만약 이미 번호를 할당 받은 학번이 목록에 들어올 경우 value 값이 갱신되어 뒷번호가 저장되도록 한다.
  3. value 값을 기준으로 오름차순 정렬한다.
  4. 정렬된 리스트에서 수강 가능 인원 만큼 학번을 출력한다.
  5. 이때 수강 가능 인원보다 신청자가 적을 있기 때문에 출력하는 부분에 예외처리를 한. 

 

dict.items()은 key, value 가 tuple로 들어있는 리스트를 만들어준다!  value 값 기준으로 오름차순 정렬할 때 참고한 자료

→  https://korbillgates.tistory.com/171

 


 

처음에 set을 이용해서 중복 없는 리스트를 만들려했다가 set은 순서를 고려하지 않는다는 문제로 딕셔너리 방법으로 구현했다. 그런데 순서를 고려하면서 중복을 제거할 수 있는 모듈이 있었다 !!

바로 Collection package의 OrderedDict이다! OrderedDict를 사용하면 리스트 내 중복을 제거하면서 요소들의 기존 순서를 유지하는 것이 가능하게 된다. 또한 OrderedDict와 list comprehension을 통한 접근 방법을 비교했을 때, OrderedDict의 속도가 훨씬 빠르다.

참고 자료 : https://m31phy.tistory.com/130

 

Comments