코딩,안되면 될때까지

[백준 1966번 - 프린터 큐]-파이썬 본문

백준/백준-파이썬

[백준 1966번 - 프린터 큐]-파이썬

soo97 2022. 3. 18. 10:47
728x90
반응형

solved.ac 난이도 :  silver3

백준 1966번- 파이썬 풀이

 

<문제>

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

 

1966번: 프린터 큐

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

www.acmicpc.net

<풀이>-시뮬레이션,큐자료구조

1.queue에 (문서의 중요도, 문서의 위치)순으로 입력받은 중요도를 삽입한다.

 

2.queue[0][0]!=max(queue)[0]이라면 queue.popleft()를 한다음 queue의 맨 뒷부분에 삽입한다.

 

3.queue[0][0]==max(queue)[0]이라면 count+=1를 해준다.(count : 출력되는 순서를 저장하는 변수)

 

4.queue.popleft()를 한다음 문서의 중요도는 x, 문서의 위치는 y에 저장한다.

(x,y = queue.popleft())

 

5.y==b(출력순서가 궁금한 문서의 위치) 라면 count를 출력하고 while문을 멈춘다.(break)

 

6.y!=b라면 while문을 계속 진행한다.(continue)

 

7.queue가 빌때까지 위 2~6번 과정을 반복한다.

<코드>-파이썬

from collections import deque

T = int(input())
for _ in range(T):
    count = 0
    queue = deque()
    a,b = map(int,input().split())
    printQ = list(map(int,input().split())) #문서의 중요도 입력
    for i in range(len(printQ)): #(문서의 중요도, 위치)
        queue.append((printQ[i],i))
    while queue:
        if queue[0][0] != max(queue)[0]:
            x,y = queue.popleft()
            queue.append((x,y)) #x:문서의 중요도, y :위치
        else:
            count+=1
            x,y = queue.popleft()
            if y == b:
                print(count)
                break
            else:
                continue
728x90
반응형
Comments