

피카츄처럼 살고싶어요.
deque)를 활용해서 풀어보겠습니다.
from collections import deque
import sys
input = sys.stdin.readline
# N: 멀티탭 구멍의 수, K: 전기용품의 총 사용횟수
N, K = map(int, input().split())
# 전기용품의 사용 순서
tools = list(map(int, input().split()))
curr = set() # 현재 멀티탭에 꼽힌 전기용품들
count = 0 # 정답: 멀티탭에서 전기용품을 뺀 욋수
curr로 관리합니다.x in curr로 특정 전기용품이 멀티탭에 꽂혀 있는지 확인하거나curr.add(x)로 전기용품을 꽂고curr.remove(x)로 전기용품을 빼는데tools로 관리합니다.tools는 [2, 3, 2, 3, 1, 2, 3].count 변수로 관리합니다.when_use = dict() # 각 전기용품의 사용 시점을 저장할 딕셔너리
for i in range(K):
if tools[i] not in when_use:
when_use[tools[i]] = deque()
when_use[tools[i]].append(i)
when_use를 이용해 각 전기용품이 사용되는 시점을 기록합니다. (지금 보니 굉장히 직설적인 이름이다...)deque)입니다.tools의 각 원소를 순회하며, 각 전기용품의 사용시점을 when_use에 추가합니다.tools[i] (키) 는 i (값) 번째 시점에 사용되는 전기용품 번호입니다.when_use[tools[i]]에 i를 대입하면 됩니다.tools가 [2, 3, 2, 3, 1, 2, 3]인 경우when_use는 아래와 같이 구성됩니다.{
2: deque([0, 2, 5]),
3: deque([1, 3, 6]),
1: deque([4])
}

when_use[용품번호]에서 .popleft()로 현재 시점을 제거합니다.when_use[전기용품][0])을 확인하면, 각 용품의 다음 사용 시점을 알 수 있습니다. popleft()가 이라서 효율적입니다.for i in range(K):
# 플러그가 꽉 찼는데 새로운 앨 넣어야 해??
# 그럼 하날 빼야즤~~~~ 하하호호~~~
if len(curr) == N and tools[i] not in curr:
# 뺄 용품의 번호를 찾아 out_tool에 저장
# 현재 꽂힌 용품 중, 제일 늦게 사용하는 용품의 사용시점을 latest_time에 저장
latest_time = -1
# 현재 꽂힌 용품 중 하나를 선택해야 한다
for p in curr:
# 1순위: 앞으로 쓸 일이 없는 용품 -> 바로 제거 확정.
if not when_use[p]:
out_tool = p
break
# 2순위: 앞으로 사용할 시점이 제일 늦은 용품 -> 일단 최댓값 갱신하고 킵해두기.
elif when_use[p][0] > latest_time:
out_tool = p
latest_time = when_use[p][0]
# 선택한 용품 제거, 교체횟수 증가
curr.remove(out_tool)
count += 1
curr.add(tools[i]) # 용품을 멀티탭에 꼽기
when_use[tools[i]].popleft() # when_use 딕셔너리에서 현재 시점 제거
for i in range(K)로, 순서대로 사용할 전기용품 (tools[i]))을 확인합니다.curr.add(tools[i])로 플러그에 꽂아 줍니다.curr은 집합이라 중복 원소를 허용하지 않기 때문에, 이미 꽂혀 있으면 (tools[i]가 curr에 이미 존재하면) 아무것도 추가되지 않습니다.when_use[tools[i]].popleft()를 해 줍니다.

len(curr) == N), 지금 사용할 전기용품이 꽂혀 있지 않은 경우 (tools[i] not in curr)when_use[p])when_use[p]가 비어 있으면, 해당 용품은 더 이상 사용되지 않으므로, 바로 제거 대상이 됩니다. (1순위)when_use[p][0]가 그 용품의 다음 사용 시점입니다. 이 값을 기준으로, 가장 늦게 다시 사용되는 전기용품을 골라 jail_mun_tool에 저장합니다. (2순위)jail_mun_tool을 curr.remove()로 멀티탭에서 제거하고, 교체 횟수인 count도 1 추가해 줍니다.from collections import deque
import sys
input = sys.stdin.readline
# N: 멀티탭 구멍의 수, K: 전기용품의 사용횟수
N, K = map(int, input().split())
# 전기용품의 사용 순서
tools = list(map(int, input().split()))
curr = set() # 현재 멀티탭에 꼽힌 전기용품을 저장
count = 0 # 정답: 멀티탭을 넣고 뺀 횟수
when_use = dict() # 각 전기용품의 사용 시점을 저장
for i in range(K):
if tools[i] not in when_use:
when_use[tools[i]] = deque()
when_use[tools[i]].append(i)
for i in range(K):
# 플러그가 꽉 찼는데 새로운 앨 넣어야 해??
# 그럼 하날 빼야즤~~~~ 하하호호~~~
if len(curr) == N and tools[i] not in curr:
# 뺄 용품의 번호를 찾아 out_tool에 저장
# 현재 꽂힌 용품 중, 제일 늦게 사용하는 용품의 사용시점을 latest_time에 저장
latest_time = -1
# 현재 꽂힌 용품 중 하나를 선택해야 한다
for p in curr:
# 1순위: 앞으로 쓸 일이 없는 용품 -> 바로 제거 확정.
if not when_use[p]:
out_tool = p
break
# 2순위: 앞으로 사용할 시점이 제일 늦은 용품 -> 일단 최댓값 갱신하고 킵해두기.
elif when_use[p][0] > latest_time:
out_tool = p
latest_time = when_use[p][0]
# 선택한 용품 제거, 교체횟수 증가
curr.remove(out_tool)
count += 1
curr.add(tools[i]) # 용품을 멀티탭에 꼽기
when_use[tools[i]].popleft() # when_use 딕셔너리에서 현재 시점 제거
print(count)
count를 출력하면 됩니다.when_use에 저장할 때 (for i in range(K))