개발/알고리즘

[프로그래머스] 프린터

Woogie2 2022. 2. 28. 19:13
반응형

주석을 통해 설명 작성. 데크를 이용하여 큐를 만들어서 품. 현재 문서보다 우선순위 높은 것을 찾을 때 any라는 함수를 이용해서 간결히 푸는 경우도 있었다. 

 

from collections import deque
def solution(priorities, location):
    # 우선 순위 값과 인덱스를 데크에 저장.
    q = deque([ (p,i) for i, p in enumerate(priorities)])
    
    # 문서의 인덱스를 저장해서 출력 순서를 기록.
    result = []
    
    while len(q) > 0:
        # f: priority
        # idx: 문서의 인덱스(priorities list 내에서)
        f, idx = q.popleft()
        # 중요도 높은 문서가 있는지 탐색. => any로 하는 풀이도 있었음.
        p_sub = [ p - f for p, _ in q ]
        is_first = True
        # 숫자 비교
        for n in p_sub:
            if n > 0: # 우선 순위가 현재 문서보다 높은 경우
                # 데크에 마지막에 추가(대기 순위 강등)
                q.append((f,idx))
                is_first = False
                break
        
        # 대기 첫 번째 문서가 가장 중요한 경우 출력 결과에 기록.
        if is_first:
            result.append(idx)
            
    # result에서 원하는 문서가 몇 번째로 기록되어 있는지 확인
    return result.index(location)+ 1
반응형