카테고리 없음
[ 백준 1700번 ] 멀티탭 스케줄링 파이썬
by realbro.noh
2021. 9. 1.
[백준 1700번 바로가기]
논리
- 주어진 콘센트의 개수만큼 가전기기의 종류를 채운다
- 다 찼을 때, 새로 들어온 것이 멀티탭 안에 없는 종류라면 어떤 것을 뽑을 지 결정
- 이후에 나오는 가전기기 중 가장 마지막에 등장하는 것을 뽑는다
- 그 가전기기를 멀티탭에서 제거하고 새로운 것을 채운다
코드
import sys
from copy import copy
def 멀티탭스케줄링():
# inputs
N, M = map(int, sys.stdin.readline().split())
appliances = list(map(int, sys.stdin.readline().split()))
curr = set()
cnt = 0
for i in range(M):
if len(curr) < N:
curr.add(appliances[i])
continue
# curr에 없는 새로운 것이 왔을 때
if appliances[i] not in curr:
# 마지막으로 나오는 것 찾기
temp = copy(curr)
for j in range(i+1, M):
if appliances[j] in temp:
temp.remove(appliances[j])
if len(temp) <= 1:
break
# temp에서 끝까지 살아남은 것 curr에서 제거
# 가장 마지막에 나오는 것 혹은 앞으로 안나오는 것
# IndexError 방지: 1구 콘센트일 경우
try:
curr.remove(list(temp)[0])
except:
curr.pop()
curr.add(appliances[i])
cnt += 1
print(cnt)
멀티탭스케줄링()