https://school.programmers.co.kr/learn/courses/30/lessons/42587
📌문제
운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다.
1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.
예를 들어 프로세스 4개 [A, B, C, D]가 순서대로 실행 대기 큐에 들어있고, 우선순위가 [2, 1, 3, 2]라면 [C, D, A, B] 순으로 실행하게 됩니다.
현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location이 매개변수로 주어질 때, 해당 프로세스가 몇 번째로 실행되는지 return 하도록 solution 함수를 작성해주세요.
📌풀이과정
1. 우선은 enumerate를 써서 index와 value 을 같이 큐에 담아줬다.
2. 큐가 빌때 까지 아래 과정을 반복한다.
- 현재 순위 리스트에서 가장 큰 순위를 최대 순위로 설정한다.
- 최대 순위가 나올 때 까지 큐에서 원소를 차례대로 pop 하고 다시 append 해준다.
- 만일 최대 순위가 나왔을 경우 answer list에 append 진행해준다.
- 최대 순위인 원소를 확인했으므로 그 다음 최대순위를 확인하기 위해, priorites 에서 현재 최대 순위를 제거하고 나머지 순위들 중 최대 순위로 업데이트를 진행한다.
- 큐가 빌때까지 반복하게 되면, 중요도가 큰 순서대로 answer에 인덱스와 우선순위가 포함되는 결과를 얻을 수 있다.
3. answer을 반복하며 location이 위치한 index를 반환한다. (이때 1부터 시작하므로 인덱스 +1) 을 해준다.
from collections import deque
def solution(priorities, location):
queue = deque([])
for idx , value in enumerate(priorities) :
queue.append([idx , value])
max_rank = max(priorities)
answer = []
while queue : #큐가 빌때까지 반복
for i , v in list(queue) :
if v == max_rank :
answer.append(i)
queue.popleft() #꺼내서 answer 리스트에 추가
priorities.remove(v)
if len(priorities) > 0 :
max_rank = max(priorities) #max값 업데이트
else :
queue.popleft() #꺼내서 젤 뒤에 append하기
queue.append([i,v])
for index , num in enumerate(answer) :
if num == location :
result = index+1
break
return result
📌 오류해결
RuntimeError : deque mutated during iteration
해당 오류를 맞이했다. 왜 오류가 발생했는지 검색해보니 , deque를 반복문 돌릴 때 deque의 내용이 변질되거나 사이즈가 변경될 경우에 뜨는 오류라고 한다. 이를 해결하기 위해서는 list를 새로 생성하거나 copy를 사용하면 된다. 나 같은 경우에는 이번문제에서 list를 새로 생성하여 해결했다. (copy 같은 경우에는 모듈을 import 하고 사용해야한다.)
#copy 사용
import copy
queue = deque([])
copy_q = copy.deepcopy(queue)
for i in copy_q :
print(i)
#리스트 새로 생성
for i in queue[:] :
print(i)
'STUDY > Algorithm' 카테고리의 다른 글
[프로그래머스/해시] 포켓몬 , 완주하지 못한 선수 (2) | 2024.07.21 |
---|---|
[프로그래머스/스택과큐] 주식가격 (0) | 2024.07.13 |
[알고리즘/스택과 큐] 프로그래머스 - 올바른괄호 (0) | 2024.07.10 |
[알고리즘/스택과 큐] 프로그래머스 - 기능개발 (0) | 2024.07.10 |
[알고리즘/스택과 큐] 프로그래머스 - 같은 숫자는 싫어 (0) | 2024.07.10 |