본문 바로가기

알고리즘

python 백준1966 프린터 큐(BOJ1966)

문제링크 : https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

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

www.acmicpc.net

구현문제는 아직 어려운걸 풀지않아서 그런지

코딩할때 귀찮음이 좀 큰것같다..나중에 정말 어려운거 만나면 멘붕오겠지?

이 문제도 내용자체는 어렵지않은데 뭔가 코드가 깔끔하지않다.. 하지만 실행 속도도 크게 뒤쳐지지않아서

이정도로 만족하고 넘어가려고한다 다음에 다시 본다면 느낌있게 수정해봐야지

from collections import deque
import sys

input = sys.stdin.readline

#테스트 케이스 갯수
test_count = int(input())

for _ in range(test_count):
  #문서갯수, 궁금한문서 위치
  n, m = map(int, input().split())
  #중요도 리스트
  input_list = list(map(int, input().split()))
  queue = deque()
  #하나씩 큐에 넣기
  for i in range(n):
    queue.append(input_list[i])

  #현재 최고 우선순위
  max_v = max(input_list)
  #출력횟수
  count = 0
  while queue:
    #가장 빠른 순서 하나 뽑기
    v = queue.popleft()

    #값이 최대값이랑 같고 문서위치도 0일때 
    if v == max_v and m ==0:
      #출력횟수 1더하고 출력/종료
      count +=1
      print(count)
      break
    
    elif v == max_v and m != 0:
      #값이 최대값이랑 같은데 문서위치가 맨앞이 아닐때
      count += 1
      #해당 문서는 삭제(출력)
      input_list.remove(max_v)
      #다시 최고우선순위 정하고
      max_v = max(input_list)
      #문서위치 앞으로 한칸
      m -= 1
      continue
    elif v != max_v and m == 0:
      #최고우선순위가 아니라면 다시 맨뒤에 추가하고 문서위치 설정
      queue.append(v)
      m = len(queue)-1
    else:
      #최고우선순위도 아니고 문서위치도 뒤에있을때
      #이번에 뽑힌건 그냥 뒤에 다시 추가하고 문서위치 -1
      queue.append(v)
      m -= 1