밍쯔와 안작고 안귀여운 에러들🖤

[Python] 프로그래머스 고득점 kit - 스택/큐: level2 프린터 본문

Algorithm

[Python] 프로그래머스 고득점 kit - 스택/큐: level2 프린터

밍쯔 2022. 1. 19. 14:52

문제

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

 

코드

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

    while True:
        try:
            tmp = queue.pop(0)
            if any(tmp[1] < q[1] for q in queue):
                queue.append(tmp)
            else:
                cnt += 1
                if tmp[0] == location:
                    break
        except IndexError:
            break
            
    return cnt

 

설명

처음의 인덱스 값과 우선순위 값을 함께 queue에 저장한다.

이를 앞에서부터 꺼내보며 우선순위가 자신보다 큰것이 있는지 비교하고, 없는 경우 다시 append하지 않고 꺼낸다.

이때, 꺼낸 tmp의 location 값이 찾던 값이면 cnt를 반환한다.

 

고찰

any, all, enumerate 사용에 익숙해지자. 파이썬을 오랜만에 썼더니 pythonic한 생각이 쉽게 나오지 않는 것 같다. 포인터의 이동을 고민하다가 늦어졌다. 언어의 특성을 고민하면서 문제에 접근하자!