문제 링크
1700. 멀티탭 스케쥴링
문제 코드
num_list = list(map(int,input().split()))
hole = num_list[0]
use = num_list[1]
multi_tab = []
num_list = list(map(int,input().split()))
count = 0
for i in range(len(num_list)):
if num_list[i] in multi_tab:
continue
if hole >0:
multi_tab.append(num_list[i])
hole -=1
else:
idx = i
tmp_list = []
result = 0
for j in range(idx,use):
tmp_list.append(num_list[j])
for j in multi_tab:
if j not in tmp_list:
result = j
break
if result == 0 :
tmp_multi = multi_tab.copy()
for j in tmp_list:
if len(tmp_multi) == 1:
result = tmp_multi[0]
break
if j in tmp_multi:
tmp_multi.remove(j)
multi_tab.remove(result)
count+=1
multi_tab.append(num_list[i])
print(count)
문제 풀이
- 추가할 전자제품이 이미 멀티탭에 꽂혀 있으면 continue
- 안 꽂혀 있지만 멀티탭이 남으면 멀티탭에 추가해주고 패스
- 안 꽂혀 있고 남은 멀티탭도 없으면 앞으로 더 꽂아줘야할 전자 제품 리스트를 확인
- 더 꽂아줘야할 전자 제품 리스트에서 지금 멀티탭에 꽂혀있는 전자제품중 없는게 있다면 빼버리고 해당 전자제품을 result로
- 더 꽂아줘야할 전자 제품 리스트에서 지금 멀티탭에 꽂혀있는 전자제품이 모두 있다면, 가장 마지막에 필요한것을 result로 선정
- result를 제거하고 count를 증가, 지금 현재 idx의 전자제품을 멀티탭에 추가해줌