알고리즘 (Python)

[프로그래머스/python] Lv.2 프로세스

개발자 쿠키 2024. 8. 7. 14:02

Lv.2 프로세스

from collections import deque

def solution(priorities, location):
     
    # 우선순위와 인덱스를 함께 저장
    deq = deque([(priority, idx) for idx, priority in enumerate(priorities)])
    cnt = 0
    while deq:
        current = deq.popleft()
        if any(current[0] < item[0] for item in deq):
            deq.append(current)
        else:
            cnt += 1
        
            if current[1] == location:
                return cnt

 

모르는 함수

enumerate()

순서가 있는 자료형 (list, set, tuple, dictionary, string)을 입력으로 받았을 때, 인덱스와 값을 포함하여 리턴

인덱스와 값을 동시에 접근하면서 루프를 돌리고 싶을 때 사용

enumerate(순서가 있는 객체, start=0)

frutis = [’orange’, ‘apple’, ‘pear’, ‘banana’, ‘kiwi’]

print(fruits)
# ['orange', 'apple', 'pear', 'banana', 'kiwi']

print(list(enumerrate(fruits)))
# [(0, 'orange'), (1, 'apple'), (2, 'pear'), (3, 'banana), (4, 'kiwi')

any()

하나라도 true인데 있으면 true

all()

모두 ture여야만 true

풀이

  1. 덱의 첫 번째 프로세스를 꺼낸다.
  2. 남아있는 프로세스 중에서 현재 프로세스 보다 우선순위가 높은 프로세스가 있는지 체크
  3. 현재 프로세스보다 우선순위가 높다면, 현재 프로세스를 다시 큐의 끝으로 보냄
  4. 그렇지 않으면 cnt += 1
  5. 실행된 프로세스가 우리가 찾는 프로세스면 cnt를 리턴