-
[백준] 1700번 멀티탭 스케줄링 (by Python)Programming/Algorithm 2021. 2. 7. 17:55
문제
보자마자 운영체제가 생각났던 문제. 실제 운영체제에서는 이렇게 앞으로 어떤 프로세스들이 들어올지 모르기에 최적의 알고리즘을 수행할 수는 없지만, 만약 안다면 이런 식으로 알고리즘을 운영할 수 있다고 배운 것이 어렴풋이 기억이 났다. 앞으로 사용하지 않을 것을 최우선으로 빼고, 가장 나중에 사용할 것은 차선으로 빼는 것.
풀이
from copy import deepcopy n, k = map(int, input().split()) arr = list(map(int, input().split())) now = [] answer = 0 temp = -1 for idx, item in enumerate(arr): if item not in now: if len(now) < n: now.append(item) else: after = arr[idx+1:] dup_now = deepcopy(now) for i, x in enumerate(now): if x not in after: dup_now.remove(x) dup_now.append(item) answer += 1 break else: if after.index(x) > temp: temp = after.index(x) if i == (len(now) - 1): dup_now.remove(after[temp]) dup_now.append(item) answer += 1 temp = -1 now = deepcopy(dup_now) print(answer)
리스트 자료형에 포함된 메소드가 많은 파이썬이라 비교적으로 쉽게 구현한 것 같다. 물론 더 파이썬으로 간단하게 구현하신 분들도 많을 것이고, C++로도 어려움 없이 구현하신 분들이 많을텐데 아직 내가 갈 길이 멀다는 거겠지! 열심히 하자:)
'Programming > Algorithm' 카테고리의 다른 글
[백준] 1261번 알고스팟 (by Python) (0) 2021.02.10 [백준] 5014번 스타트링크 (by Python) (0) 2021.02.07 [백준] 14226번 이모티콘 (by Python) (0) 2021.02.07 [백준] 1707번 이분 그래프 (by Python) (0) 2021.02.06 [백준] 10971번 외판원 문제 2 (by Python) (0) 2021.01.31