GW LABS

[Backjoon] 프린터 큐 본문

Algorithm & DataStructure

[Backjoon] 프린터 큐

GeonWoo Kim 2020. 10. 4. 14:07

문제 조건을 제대로 파악하지 않고 우선순위 큐이겠거니 접근한 결과, 1시간 가량을 날려먹었다. 최소, 최대 힙으로 구현한 우선순위 큐에 대한 이해가 낮아서 이런 문제가 발생했다. 문제 조건만 제대로 파악하고 파이썬을 활용하면 아주 손쉽게 풀 수 있는 문제였다. 초기 인덱스를 값과 함께 묶어준 다음 큐 연산을 수행하는 게 핵심 아이디어이다.

 

import sys
from collections import deque

def rotate_documents(ziped_documents):
    zip_max = max(ziped_documents)[0]
    while ziped_documents[0][0] != zip_max:
        ziped_documents.rotate(-1)

if __name__ == "__main__":
    cases = int(sys.stdin.readline())

    answer = []
    for _ in range(cases):
        count, target = list(map(int, sys.stdin.readline().split(" ")))
        documents = list(map(int, sys.stdin.readline().split(" ")))
        index_documents = list(range(len(documents)))

        checker = documents[target]
        ziped_documents = list(zip(documents, index_documents))
        ziped_documents = deque(ziped_documents)

        result = 0
        printed, index_printed = None, None
        while printed != checker or index_printed != target:
            # print(ziped_documents)
            rotate_documents(ziped_documents)
            printed, index_printed = ziped_documents.popleft()
            result += 1
        answer.append(result)

    for item in answer:
        print(item)
        

 

또 파이썬의 deque 모듈을 이용하면 리스트를 이용하는 것보다 훨씬 빠른 삽입, 삭제, 회전 연산을 수행할 수 있다. 여러모로 배운게 많은 문제였다.

Comments