[Algorithm] 백준 1966 : 프린터 큐

채멈·2024년 1월 5일

Algorithm

목록 보기
4/24
post-thumbnail

문제
https://www.acmicpc.net/problem/1966
풀이
https://github.com/nowChae/algorithm/blob/master/%EB%B0%B1%EC%A4%80/Silver/1966.%E2%80%85%ED%94%84%EB%A6%B0%ED%84%B0%E2%80%85%ED%81%90/%ED%94%84%EB%A6%B0%ED%84%B0%E2%80%85%ED%81%90.py


중요도에 따라 인쇄 여부를 결정하는 문제였다. 중요도를 담은 리스트와 순서를 담은 리스트 두개를 선언하여 문제를 해결하였다. 큐 자료구조를 활용하기 위해서 deque 라이브러리를 사용해 구현해주었다.

만약 중요도 리스트에 가장 첫번째 값이 중요도가 가장 크다면, 그 값은 중요도 리스트, 순서 리스트에서 모두 popleft 해주었다. 이때 순서 리스트의 첫 번째 값이 찾고자 하는 순서의 값이라면 해당 순서(count)를 출력해주고 while문을 빠져나오도록 해주었다. 만약 찾고자 하는 값이 아니라면 count 값을 증가해주었다.
만약 첫번째 값의 중요도가 가장 큰 값이 아니라면 중요도 리스트와 순서 리스트의 맨 첫번째 값을 popleft하고 다시 그 값들을 각각 append 해주었다.

중요도라는 조건이 하나 추가되어서 그렇지, queue라는 자료구조를 알고 deque 모듈을 사용하면 간단하게 구현할 수 있었던 것 같다.

< 풀이 코드 >

from collections import deque
import sys

test = int(sys.stdin.readline())

for _ in range(test):
  N, K = map(int,sys.stdin.readline().split())
  importance = deque(list(map(int, sys.stdin.readline().split())))

  queue = deque([i for i in range(N)])

  count = 1
  while True:
    maxImportance = max(importance)
    if importance[0] == maxImportance:
      if queue[0] == K:
        print(count)
        break
      else:
        importance.popleft()
        queue.popleft()
        count += 1
    else:
      i = importance.popleft()
      q = queue.popleft()
      importance.append(i)
      queue.append(q)
      
profile
공부 기록 차곡차곡 ( ੭ ・ᴗ・ )੭

0개의 댓글