운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다.
현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location이 매개변수로 주어질 때, 해당 프로세스가 몇 번째로 실행되는지 return 하도록 solution 함수를 작성해주세요.
| priorities | location | return |
|---|---|---|
| [2, 1, 3, 2] | 2 | 1 |
| [1, 1, 9, 1, 1, 1] | 0 | 5 |
예제 #1
문제에 나온 예와 같습니다.
예제 #2
6개의 프로세스 [A, B, C, D, E, F]가 대기 큐에 있고 중요도가 [1, 1, 9, 1, 1, 1] 이므로 [C, D, E, F, A, B] 순으로 실행됩니다. 따라서 A는 5번째로 실행됩니다.
풀이
조금 더 잘 풀 수 있었는데,, 거의 다 와놓고 방법을 틀어버렸던 문제
왜인지 오늘은 머리가 잘 안돌아가서 난이도에 비해 조금 오래걸렸다
priorities와 원소들의 인덱스를 저장한 리스트, 원소마다의 count를 저장한 리스트를 만들어서 deque로 만들었다
그리고 deque에서 popleft를 하면서 큐에 남은 값들 중 현재 값보다 큰 값이 있는지 검사한다
만약 있다면 큐 뒤에 새로 append를 해주고, 없거나 현재 값과 같다면 location이 일치하는지 비교한다 이후 count 리스트를 모두 +1 해주었다
코드
from collections import deque
def solution(priorities, location):
q_prior = deque(priorities)
q_idx = deque(range(len(priorities)))
q_cnt = deque([1]*len(priorities))
while q_prior:
p, i, c = q_prior.popleft(), q_idx.popleft(), q_cnt.popleft()
if len(q_prior) > 0:
if p < max(q_prior):
q_prior.append(p)
q_idx.append(i)
q_cnt.append(c)
else:
if i == location:
return c
q_cnt = deque([x + 1 for x in q_cnt])
else:
if i == location:
return c