본문 바로가기

스터디 1일 1커밋

240218 [BOJ/백준] 1966. 프린터 큐

 

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net


나의 코드

from collections import deque

T = int(input())
for t in range(T):
    N, M = map(int, input().split())
    data = list(map(int, input().split()))

    doc_idx = deque()
    doc = deque()


    for i in range(N):      #프린트 할 문서의 중요도를 인덱스와 자료에 따로 넣기
        doc_idx.append(i)
        doc.append(data[i])
    # print(doc_idx, doc)


    count = 0
    x = doc[M]
    while x in doc:  #doc안에 찾는 문서가 없어질 때까지
        if doc[0] == max(doc):
            count += 1
            if doc_idx[0] == M:
                print(count)
                break
            else:
                doc_idx.popleft()
                doc.popleft()
        else:
            doc_idx.append(doc_idx.popleft())
            doc.append(doc.popleft())

결과


처음에는 enQueue, deQueue 함수를 만들어서 코드를 작성하고 있었다. 대충 짰는데 아무리 생각해봐도 중요도를 점점 작게 설정하는 방법을 모르겠다.(물론 찾아보진 않았다...ㅎㅎ) 내일 수정해볼 수 있으면 수정하는 걸로 하겠다.

다음에는 deque라이브러리를 쓰는 방법으로 했다. 처음에 생각했던 틀에서는 벗어나지 않았으나 디큐를 쓰니 존재했던 자료를 없애면서 중요도가 제일 높은 자료를 찾으면서 없앨 수 있었다. 하지만 while에 찾는 문서가 없어진다는 종료조건을 버릴 수 없던 나는 이걸 써보려다가 인덱스 에러가 났다. while doc[M] in doc: 으로 종료조건을 주니 반복문이 돌며 doc[M]의 값이 변했는데 그걸 생각 못했다. 파이참에서는 결과가 잘 나오니 또 왜이러나 승질났었다. 아무튼 x에 doc[M]값을 따로 할당해서 답을 맞힐 수 있었다. 근데 속도는 유의미하지는 않지만 더 느려졌네? 학교실습에서 가장 최적화 된 방법을 알려주나보다. 알려준대로 풀어보자!!