자료구조&알고리즘/프로그래머스

[Python] 프로세스 - 스택/큐

두잇 두두 2024. 2. 7. 21:21
728x90

 

 

 


문제

https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

 

코드

 

from collections import deque

def solution(priorities, location):
    queue = deque([(i,p) for i,p in enumerate(priorities)])
    order = 0

    while queue:
        cur_process = queue.popleft()

        if any(cur_process[1]<p[1] for p in queue):
            queue.append(cur_process)
        else:
            order += 1
            if cur_process[0] == location:
                return order

 

 

 

 

다른 사람 코드

 

def solution(p, l):
    ans = 0
    m = max(p)
    while True:
        v = p.pop(0)
        if m == v:
            ans += 1
            if l == 0:
                break
            else:
                l -= 1
            m = max(p)
        else:
            p.append(v)
            if l == 0:
                l = len(p)-1
            else:
                l -= 1
    return ans

 

 

 

접근법

이 문제는 큐 자료구조를 사용하여 프로세스를 처리하는 시뮬레이션 문제입니다. 큐를 활용하여 프로세스를 처리하면서 주어진 규칙에 따라 진행하면 되며 enumrate를 사용해서 location의 위치를 index로 체크하는 게 관건입니다.


주어진 priorities 리스트를 큐로 만듭니다.
큐에서 하나의 프로세스를 꺼내고, 우선순위가 더 높은 프로세스가 있는지 확인합니다.
높은 우선순위가 있다면 다시 큐에 넣고, 아니라면 해당 프로세스를 처리하고 순서를 증가시킵니다.
처리한 프로세스가 목표로 주어진 위치인지 확인하고, 맞다면 현재까지 처리한 순서를 반환합니다.

 

배운 점

any를 사용하는 방법에 대해 배웠습니다

all 함수의 반대로 받은 요소 중 하나라도 True면 True를 돌려주고, 모두 False일 경우에만 False를 return 한다

all 함수는 모든 요소가 True이면 True, 하나라도 False이면 False를 리턴한다.