문제
- 특정 프로세스가 몇 번째로 실행되는지 알아내기
- 프로세스 실행 규칙
- 실행 대기 큐에서 대기중인 프로세스 꺼내기
- 큐에 대기 중인 큐 중에서 우선순위가 더 높은 프로세스 있으면, 꺼낸 프로세스 큐에 다시 넣기
- 없으면 해당 프로세스 실행하기
- 1 <= 프로세스 개수 <= 100
- 1 <= 우선순위 숫자 <= 9
풀이
- 시간 복잡도 : 프로세스 개수가 100개이므로 대부분의 알고리즘 사용 가능하다.
- 실행해야 될 우선 순위 별로 정렬하고, 순서대로 실행하다가 원하는 위치가 나오면 출력하기
- 각 우선순위 별 프로세스의 개수를 기록해서, 그 개수만큼 프로세스 실행 될 때까지 계속 큐 돌리기
from collections import deque
def solution(priorities, location):
prior_cnt = [0]*10 # 중요도 별 프로세스 개수
process = deque([]) # 프로세스 순서와 중요도를 묶어서 저장
for i, p in enumerate(priorities):
process.append((i, p))
prior_cnt[p] += 1
answer = 0 # 정답 변수
# 실행해야 할 우선순위 별로 정렬
for p in sorted(list(set(priorities)), reverse=True) :
while prior_cnt[p] > 0 :
i, now_p = process.popleft()
# 현재 프로세스를 실행할 수 있으면
if now_p == p :
answer += 1
prior_cnt[p] -= 1
if i == location : # 원하는 위치라면 출력하기
return answer
else:
process.append((i, now_p))
References