[프로그래머스] 프린터 문제분석 python

mauz·2022년 5월 24일
0

🐒 문제

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

✍ 풀이

from collections import deque

def solution(priorities, location):
    answer = 0

    q = deque((v,i) for i,v in enumerate(priorities))

    while q:
        item = q.popleft()
        if q and max(q)[0] > item[0]:
            q.append(item)
        else:
            answer += 1
            if item[1] == location:
                break
    return answer

만든사람 넘 똑똑한듯


🧠 문제 이해

처음에 우선순위 큐를 이용해 풀려고 시도했으나 같은 우선 순위를 가지는 요소가 발생할때 마지막으로 처리했던 인덱스의 우측에서 가까운요소를 불러와야하는데 어떻게 해야할지 몰라서 검색을 했다.

풀이에서는 우선순위 큐가 아닌 그냥 큐를 사용한다.

작동방식

입력
>priorities = [2,1,3,2]
>location = 2

큐의 첫번째 인덱스의 우선순위인 2 는 큐에서 가장 큰 우선순위인 3보다 작으므로
첫번째 인덱스를 떼어서 큐 마지막에 붙인다.

큐의 두번째 인덱스의 우선순위인 1 는 큐에서 가장 큰 우선순위인 3보다 작으므로
두번째 인덱스를 떼어서 큐 마지막에 붙인다.

큐의 세번째 인덱스의 우선순위인 3은 큐에서 가장 큰 우선순위인 3보다 작지 않다.
출력횟수 answer에 1을 추가한다.
세번째 인덱스를 떼어낸다.
떼어낸 인덱스가 location과 일치하므로 while문을 종료한다.

출력
>1
입력
>priorities = [1, 1, 9, 1, 1, 1]
>location = 0

큐의 첫번째 인덱스의 우선순위인 1 는 큐에서 가장 큰 우선순위인 9보다 작으므로
첫번째 인덱스를 떼어서 큐 마지막에 붙인다.

큐의 두번째 인덱스의 우선순위인 1 보다 큐에서 가장 큰 우선순위인 9보다 작으므로
두번째 인덱스를 떼어서 큐 마지막에 붙인다.

큐의 세번째 인덱스의 우선순위인 9은 큐에서 가장 큰 우선순위인 3보다 작지 않다.
출력횟수 answer에 1을 추가한다. answer == 1
세번째 인덱스를 떼어낸다.

큐의 네번째 인덱스의 우선순위인 1은 큐에서 가장 큰 우선순위인 1보다 작지 않다.
출력횟수 answer에 1을 추가한다. answer == 2
네번째 인덱스를 떼어낸다.

큐의 다섯번째 인덱스의 우선순위인 1은 큐에서 가장 큰 우선순위인 1보다 작지 않다.
출력횟수 answer에 1을 추가한다. answer == 3
다섯번째 인덱스를 떼어낸다.

큐의 여섯번째 인덱스의 우선순위인 1은 큐에서 가장 큰 우선순위인 1보다 작지 않다.
출력횟수 answer에 1을 추가한다. answer == 4
여섯번째 인덱스를 떼어낸다.

큐의 일곱번째(첫번째) 인덱스의 우선순위인 1은 큐에서 가장 큰 우선순위인 1보다 작지 않다.
출력횟수 answer에 1을 추가한다. answer == 5
일곱번째 인덱스를 떼어낸다.
떼어낸 인덱스(0)가 location(0)과 일치하므로 while문을 종료한다.

출력
>5

profile
쥐구멍에 볕드는 날

0개의 댓글