본문 바로가기
코딩테스트

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

by CuckooBird 2023. 2. 18.

백준 실버3 13414번 수강신청 - Python

https://www.acmicpc.net/problem/13414

 

13414번: 수강신청

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

www.acmicpc.net


문제


코드

맞았습니다가 뜬 코드입니다. - 메모리 86572KB | 시간 480ms | 코드 길이 303B

import sys
input = sys.stdin.readline
k, l = map(int, input().rstrip().split())
s = dict()
ans = list()
for i in range(1, l+1):
    num = input().rstrip()
    s[num] = i
s = dict(sorted(s.items(), key = lambda x:x[1]))
cnt = 0
for i in s.keys():
    cnt += 1
    print(i)
    if cnt == k:
        break

학번을 key값에, 순서를 value값에 넣고 value값을 기준으로 정렬했습니다.


Try1.

시간초과가 뜬 코드입니다. - 코드 길이 234B

import sys
input = sys.stdin.readline
k, l = map(int, input().rstrip().split())
s = list()
for _ in range(l):
    num = int(input().rstrip())
    if num in s:
        s.remove(num)
    s.append(num)
for i in range(k):
    print(s[i])
  • 리스트만으로 푼 코드입니다.

Try2.

시간초과가 뜬 코드입니다. - 코드 길이 326B

import sys
input = sys.stdin.readline
k, l = map(int, input().rstrip().split())
s = dict()
ans = list()
for _ in range(l):
    num = int(input().rstrip())
    if num in s:
        ans.remove(num)
        ans.append(num)
        continue
    else:
        s[num] = 0
        ans.append(num)
for i in range(k):
    print(ans[i])
  • 딕셔너리를 사용했지만 in연산자와 리스트를 사용해서 시간초과가 난 게 아닐까 싶습니다.

Try3.

틀렸습니다가 뜬 코드입니다. - 코드 길이 308B

import sys
input = sys.stdin.readline
k, l = map(int, input().rstrip().split())
s = dict()
ans = list()
for i in range(1, l+1):
    num = int(input().rstrip())
    s[num] = i
s = dict(sorted(s.items(), key = lambda x:x[1]))
cnt = 0
for i in s.keys():
    cnt += 1
    print(i)
    if cnt == k:
        break
  • 학번입력을 int로 받아서 만약 0으로 시작하는 학번을 입력받았을 때, 0이 사라지게 됩니다. 0123456과 123456이 같은 학번이 되게 됩니다. int -> str 타입으로 입력받아야합니다.

후기

첨에 리스트로 풀어서 아이스크림 선배마냥 이거 왤캐 쉬워? 했는데

시간초과 뜨자마자 이거쥐~ 하면서 잼게 풀었습니당

 

https://www.youtube.com/watch?v=HESwPzW3-BA&ab_channel=ererrer