백준 실버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
'코딩테스트' 카테고리의 다른 글
[백준] 1141번 접두사 - Python (2) | 2023.02.20 |
---|---|
[백준] 1965번 상자넣기 - Python (1) | 2023.02.19 |
[백준] 15649번 N과 M (1) - Python (1) | 2023.02.17 |
[백준] 10025번 게으른 백곰 - Python (1) | 2023.02.17 |
[백준] 2992 크면서 작은 수 - Python (3) | 2023.02.16 |