일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 그래프
- 백준 16918번
- 백준 15787번
- 백준 3085번
- 명품자바
- 백준 1987
- 백준 2512번
- 머신러닝과 딥러닝
- java_programming
- 자바
- AWS
- 백준 17451번
- 그리디
- react
- 다이나믹프로그래밍
- 다이나믹 프로그래밍
- 깃헙
- SWEA 15612번
- 백준 1253번
- 백준
- 모각코
- 알고리즘
- ubuntu
- MySQL
- HUFS 모각코 캠프
- 백준 1331번
- Python
- 백준 18310번
- SQL
- javascript
Archives
- Today
- Total
차곡차곡
[BOJ/Python] 백준 13414번 - 수강신청 본문
백준 #13414 수강신청
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
- 딕셔너리로 신청자 대기 목록을 만든다.
- key 값을 학번으로 하고 value 값을 for문의 제어변수로 하여 각 학번마다 들어온 순서가 저장되도록 한다. 만약 이미 번호를 할당 받은 학번이 한 번 더 목록에 들어올 경우 value 값이 갱신되어 뒷번호가 저장되도록 한다.
- value 값을 기준으로 오름차순 정렬한다.
- 정렬된 리스트에서 수강 가능 인원 만큼 학번을 출력한다.
- 이때 수강 가능 인원보다 신청자가 더 적을 수 있기 때문에 출력하는 부분에 예외처리를 한다.
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
'CS > Algorithm' 카테고리의 다른 글
[BOJ/Python] 백준 9205번 - 맥주 마시면서 걸어가기 (0) | 2022.07.19 |
---|---|
[파이썬 알고리즘 인터뷰] 12장 그래프 (0) | 2022.07.15 |
[BOJ/Python] 백준 2002번 - 추월 (0) | 2022.07.09 |
[BOJ/Python] 백준 16206번 - 롤케이크 (0) | 2022.07.08 |
[파이썬 알고리즘 인터뷰] 11장 해시 테이블 (2) | 2022.07.08 |
Comments