본문 바로가기

알고리즘 삽질장

[프로그래머스] 프린터

반응형


문제설명

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

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

사고과정

  • 큐를 활용한 풀이었다. 예전에 인프런 강의를 들으면서 풀어보았던 응급실 문제와 매우 유사했다. 오랜만에 풀었지만 그래도 푸는 데 성공! 주의할 점은 이번 문제도 문서의 중요도와 그 문서의 위치를 튜플로 큐에 담고있어야 한다!
  • 그리고 큐 길이가 1이 될때까지 문제에서 주어진 규칙을 수행하면서 큐에서 popleft한 튜플의 원소가 문제에서 매개변수로 주어진 location과 동일할 때 return 해준다. 그리고 혹시라도 인쇄 작업이 1개만 주어졌을 수도 있으므로 이를 대비해 while 바깥문에도 return 구문을 넣어준다! 또 처음 cnt 값을 1로 설정해주어야 함! 왜냐하면 0번째로 인쇄된다는 말은 없으므로 가장 첫 번째는 1번째로 인쇄되는 것임!

풀이

from collections import deque

def priority(tmp, queue):
    p, i = tmp
    for i in range(1, len(queue)):
        p_, i_ = queue[i]
        if p < p_:
            return False
    return True


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

    while len(queue) != 1:
        tmp = queue[0]
        if not priority(tmp, queue):
            queue.append(queue.popleft())
        else:
            prior, loc = queue.popleft()
            if loc == location:
                return cnt
            cnt += 1
    return cnt
반응형