temp = socket.copy() 로 해야 복사본이 생성된다. 그냥 temp = socket 이렇게 하면 같이 동기화됨.
예전에는 어떻게 풀어야 되는지 도무지 감도 안오던 문제였는데, 다시 보니 기억도 나고 실제로도 쓰이는 유용한 알고리즘이다.
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline
N, k = map(int, input().split())
schedule = list(map(int, input().split()))
socket = []
cnt = 0
for i in range(k):
# 이미 socket에 꽂혀있으면
if schedule[i] in socket:
continue
# 안꽂혀있고 소켓 자리가 비어있으면
elif len(socket) < N:
socket.append(schedule[i])
continue
# 교체를 해야된다면
else:
temp = socket.copy()
for temp_usage in range(i+1, k) :
if len(temp) <= 1:
break
# socket에 꽂혀있는 것 중, 금방 사용할 것들은 남겨놓고,
# schedule에서 제일 늦게 사용되는것을 빼는작업
if schedule[temp_usage] in temp:
temp.remove(schedule[temp_usage])
# temp[0]로 한 이유는 안쓰게 될 것들이 한개 이상일 수도 있어서
socket.remove(temp[0])
socket.append(schedule[i])
cnt += 1
print(cnt)
# print(socket)