본문 바로가기

코딩테스트 준비/[백준]

[백준] 1700번 - 멀티탭 스케쥴링 (파이썬)

https://www.acmicpc.net/problem/1700

 

1700번: 멀티탭 스케줄링

기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전

www.acmicpc.net

 

[코드]

import sys
N, K = map(int, sys.stdin.readline().split())
use_order = list(map(int, sys.stdin.readline().split()))

cur_plugged = []
unplug_times = 0

for i, elec in enumerate(use_order):
    # 이미 꽂혀 있니?
    if elec in cur_plugged:
        continue
    # 멀티탭이 비어있니?
    if len(cur_plugged) < N:
        cur_plugged.append(elec)
        continue
        
        
    # 멀티탭에 전부 꽂아서 하나 빼야함

    # 다시 안쓰이는 전자제품 있니?
    is_there_unused_elec = False
    change_idx = 0
    for j, v in enumerate(cur_plugged):
        if v not in use_order[i:]:
            is_there_unused_elec = True
            change_idx = j
    # 다시 안쓰이는게 있는경우
    if is_there_unused_elec:
        del cur_plugged[change_idx]
        cur_plugged.append(use_order[i])
    # 다시 안쓰이는게 없는 경우, 전부 나중에 쓰임
    else:
        # 가장 나중에 쓰이는 것을 바꿔야함
        tmp = [0] * len(cur_plugged)
        for k, v in enumerate(cur_plugged):
            tmp[k] = use_order[i:].index(v)
        change_idx = tmp.index(max(tmp))
        del cur_plugged[change_idx]
        cur_plugged.append(use_order[i])
    unplug_times += 1
print(unplug_times)