
silver 3 / 해시
딕셔너리 line에 들어오는 학번을 key, 순서를 value로 저장한다.
이렇게 저장하면 자연스럽게 중복 클릭한 학생은 뒷 순서로 밀리게된다.
그러고나면 value를 기준으로 정렬을 해야한다.
key를 사용하는 방법이 잘 기억이 안났었는데 분명 다른 방법으로도 딕셔너리를 value값을 기준으로 정렬할 수 있었다.
그리고 앞부터 순서대로 k명의 학번을 출력한다.
여기서 틀렸습니다가 나왔다면 학번을 int로 받았는지 확인할 것.
우리는 당연히 학번이 20 어쩌구로 시작할 것이라고 생각하지만 그런 조건은 어디에도 없다.
힌트로 예제입력에도 "01234567"이라는 학번이 들어간다.
숫자형으로 받았다면 앞자리가 사라지면서 나중에 출력할 때 본래의 학번이 안나오게 된다.
그리고 런타임 에러 (IndexError)가 나왔다면 출력부분을 확인할 것.
지원한 학생이 k명 즉 수용 인원보다 적다면 당연히 k명보다 조금만 출력하게 된다.
무작정 앞에서 k번째 값까지 출력하도록 작성했다면 IndexError가 발생할 수 있다.
물론 이 부분들은 내가 직접 틀려보고 알았다. ㅎ
# 수강신청
# hash
import sys
input = sys.stdin.readline
if __name__ == "__main__":
k, l = map(int, input().split())
line = {}
for i in range(l):
student_num = input().rstrip()
line[student_num] = i
sorted_line = sorted(line, key=lambda x: line[x])
i = 0
while i < k and i < len(sorted_line):
print(sorted_line[i])
i += 1
예상 외로 정답률이 높지 않은 문제였다.
생각보다 testcase의 input의 크기가 큰 모양이다.
질문 게시판을 둘러보니 input()함수를 사용해서 시간초과를 맞은 python 유저들이 보였다.
input()은 시간이 오래 걸린다는 점을 명심하자..!
나도 예전에는 그냥 input()을 썼었는데
이제는 sys.stdin.readline이 익숙해져버렸다.