프로그래머스/알고리즘 고득점 Kit

[프로그래머스] [스택/큐] Lv.2 /프로세스 (파이썬/Python)

junslee 2025. 4. 8. 09:58

1. 문제 설명

2. 코드 

from collections import deque

def solution(priorities, location):
    queue = deque([(p, idx) for idx, p in enumerate(priorities)])
    count = 0
    
    while queue:
        current = queue.popleft()
        if any(x[0] > current[0] for x in queue):
            queue.append(current)
        else:
            count += 1
            if current[1] == location:
                return count

3. 풀이 과정

리스트보다 popleft()를 사용하기 위해 duque 패키지를 불러온다.

queue 변수에 priorities를 enumerate()해서 (우선순위,초기위치) 튜플로 저장한다.

실행 순번 카운터하는 count를 0으로 불러온다.

queue가 0이 될 때까지, 빌 때까지 while문으로 반복한다.

popleft()로 queue의 왼쪽에서 프로세스를 추출해 current에 저장한다.

더 높은 우선순위가 존재하는지 any()로 확인한다.

더 높은 값이 존재하여 재삽입하게 되면 append()로 맨 뒤로 삽입한다.

아니면 count에 1을 추가하고 current[1]이 location과 같아지면 count를 반환한다.

4. 추천 코드

def solution(priorities, location):
    queue =  [(i,p) for i,p in enumerate(priorities)]
    answer = 0
    while True:
        cur = queue.pop(0)
        if any(cur[1] < q[1] for q in queue):
            queue.append(cur)
        else:
            answer += 1
            if cur[0] == location:
                return answer

5. 추천 코드의 풀이 과정

popleft()를 사용하지 않고 pop(0)으로 대신하여 작성한 코드이다.

while queue가 아니라 True로 무한 반복문을 작성하였다.