import sys
# from collections import deque
input = sys.stdin.readline
n = int(input()) # 사진틀 개수
vn = int(input()) # 전체 학생의 추천 횟수
arr = list(map(int, input().split())) # 추천받은 학생들 (순서대로)
gallery = [] # element: [학생번호, 횟수, 시간]
# 사진틀에 학생 s가 존재하는지 판단
def isExist(s):
global gallery
if list(map(lambda x: x[0], gallery)).count(s) > 0: return True
for s in arr:
# 사진틀에 빈 공간이 있는 경우
if len(gallery) < n:
# 사진이 존재하지 않으면 새로 추가
if not isExist(s):
gallery.append([s, 1, 0])
else:
# 사진이 존재하면 횟수만 증가
idx = list(map(lambda x: x[0], gallery)).index(s)
gallery[idx][1] += 1
# 사진틀이 다 찬 경우
else:
# 사진이 존재하지 않으면 가장 횟수가 적으면서 오래 개재된 학생 사진(idx: 0)을 제거
# 그 후 새 학생을 추가
if not isExist(s):
gallery.pop(0)
gallery.append([s, 1, 0])
else:
# 사진이 존재하면 횟수만 증가
idx = list(map(lambda x: x[0], gallery)).index(s)
gallery[idx][1] += 1
# 가장 횟수가 적으면서 오래 개재된 학생 순으로 사진틀을 정렬
gallery.sort(key=lambda x: (x[1], -x[2]))
# 사진틀에 개재된 학생들의 개재 시간을 모두 1씩 증가
gallery = list(map(lambda x: [x[0], x[1], x[2]+1], gallery))
# 정답 출력 (사진틀에 남은 학생 리스트)
print(' '.join(map(str, sorted(list(map(lambda x: x[0], gallery))))))
시뮬레이션
문제이다. map
과 sort
함수를 활용하니 코드가 간단해졌다.