Today
Total
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
관리 메뉴

기억은 짧고 기록은 길다

[프로그래머스/Programmers] 프린터 - Python 본문

CodingTest/programmers

[프로그래머스/Programmers] 프린터 - Python

ukunV 2021. 9. 7. 15:50

Link

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

 

Solution

해당 문제는 Solution의 key point인 deque, Other Solution의 key point인 any를 사용하지 않아도 쉽게 풀 수 있는 문제였다.

하지만 이번 문제를 통해 any()의 사용법을 습득해갔으면 한다.

참고로 필자의 풀이인 Solution에 대한 설명을 덧붙이자면 while len(q) > 1인 이유는 q가 비어있게 되면 max(q, key=lambda x: x[1])[1]이 작동하지 않기 때문에 그 전까지만 while문을 돌린후 location이 마지막 프린터되는 인덱스를 가르키는 경우 answer에 즉 순서에 1만 더하여 출력하도록 하였다.

마지막에 any()와 all()의 사용법에 대해 설명되어 있는 글을 첨부할테니 참고바란다.

from collections import deque

def solution(priorities, location):
    answer = 0

    q = deque([(i, j) for i, j in enumerate(priorities)])

    while len(q) > 1:
        now = q.popleft()

        if now[1] < max(q, key=lambda x: x[1])[1]:
            q.append(now)
        else:
            answer += 1

            if now[0] == location:
                return answer

    return answer + 1
🔑 key point: deque(), max(q, key=lambda x: x[1])[1]

 

Other Solution

def solution(priorities, location):
    answer = 0

    q =  [(i, p) for i,p in enumerate(priorities)]

    while True:
        cur = q.pop(0)

        if any(cur[1] < i[1] for i in q):
            q.append(cur)
        else:
            answer += 1

            if cur[0] == location:
                return answer
🔑 key point: any()

 

첨부

https://velog.io/@anrun/Python-all-any-%ED%95%A8%EC%88%98

Comments