현제의 현재이야기

[백준/python] 13414 - 수강신청 본문

algorithm

[백준/python] 13414 - 수강신청

현재의 현제 2022. 7. 16. 02:12

 

13414번: 수강신청

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

www.acmicpc.net

from collections import deque, OrderedDict


k, l = tuple(map(int, input().split()))
student = deque()
for _ in range(l):
    a = input()
    student.appendleft(a)

student = list(student)
student = list(dict.fromkeys(student))

for _ in range(k):
    print(student.pop())
    if len(student) == 0:
        quit()

| 알고리즘

1. 거꾸로 다받고, 순서지키면서 중복제거.

2. 그 후, 뒤에서 몇 번 pop.

예)

입력 : a, b, c, a, d, c

student = [c, d, a, c, b, a]

dict.fromkeys(student) = [c, d, a, b]

이걸 거꾸로 해보면 b, a, d, c 인데 이러면 중복한 것의 앞의 것을 제거한 것과 마찬가지가 된다.

 

fromkeys : 설명 블로그. -> 순서를 지키면서 리스트 중복 제거

https://yjs-program.tistory.com/271?category=804886 

 

[Python] list 중복 제거(순서 유지(OrderedDict, Dict), 순서 무관(set))

보통 List를 사용할 때 내부 중복 제거를 위해서 단순히 set으로 중복을 제거한 후, 다시 list로 변환하는 경우가 많은것 같다. 나 역시도 간단했기 때문에 제일 많이 사용한 방식이다. sample_list = [1,

yjs-program.tistory.com

 

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

 

https://korbillgates.tistory.com/171

 

[python] 파이썬 사전 딕셔너리 값 value 로 정렬하는 방법 - lambda 식 응용 - 파이썬으로 단어 수 세기

안녕하세요 한주현입니다. 오늘은 python에서 딕셔너리의 값으로 정렬하는 방법에 대해 알아보겠습니다. 들어가며 python 의 사전형은 순서가 없는 자료형입니다. 그런데 가끔 우리는 사전의 값

korbillgates.tistory.com

.items가 딕셔너리를 튜플로 (키, 벨류)로 만들어준다.

Comments