본문 바로가기

코딩테스트/Python

[Python] 백준 #1966 - 프린터 큐

문제


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

 

1966번: 프린터 큐

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

www.acmicpc.net

 

 

 

풀이


[내 코드]

from collections import deque
import sys
input=sys.stdin.readline

n = int(input())
for _ in range(n):
    a,b=map(int,input().split())
    arr = deque(map(int,input().split()))
    index=b #1
    cnt=0
    while True:
        x = arr.popleft() #2
        if not arr: # 3
            print(cnt+1)
            break
        if x < max(arr): #4
            arr.append(x)
            if index==0: index=len(arr)-1
            else: index-=1
            
        else: 
            if index==0: #5 
                print(cnt+1)
                break
            else: #6
                cnt+=1
                index-=1

 

 

 

  1. index는 출력해야하는 원소의 위치, cnt는 출력한 개수이다.
  2. 덱을 popleft()하여 제일 첫번째 원소를 x에 저장한다.
  3. 만약 arr 이 비었으면 x가 0번째 순서였으므로 cnt+1을 출력해준다.
  4. 첫번째 원소 x와 남아있는 arr의 최댓값을 비교해준다. arr에 x보다 더 큰것이 있으면 x를 arr에 append하고 index도 -1을 해주어야한다. 이때 index가 0이면 len(arr)-1을 해준다. 
  5. arr에 x보다 큰 원소가 없으면 cnt를 올려줘야한다. 이때 index가 0이면 cnt+1를 출력하며 break해준다.
  6. 인덱스가 0이 아닐경우 cnt를 1 더해주고 index에는 1을 빼준다.

 

 

[다른사람 코드] 

t = int(input())
for i in range(t):
    n, m = map(int, input().split())
    s = list(map(int, input().split()))
    s_ = [0 for i in range(n)]
    s_[m] = 1
    cnt = 0
    while True:
        if s[0] == max(s):
            cnt += 1
            if s_[0] == 1:
                print(cnt)
                break
            else:
                del s[0]
                del s_[0]
        else:
            s.append(s[0])
            del s[0]
            s_.append(s_[0])
            del s_[0]

다른사람 코드도 들고와봤다.

내 코드와 다른점은

 

  1. 몇번째로 인쇄되었는지 궁금한 문서의 위치를 index 변수말고 s_리스트로 선언
  2. 리스트에서 처음것을 pop하지 않고 바로 max와 비교

 

 

느낀점


이 문제 프로그래머스에서 푼적있다!

https://programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

 

https://e-you.tistory.com/27

 

[프로그래머스]프린터

스택, 큐부분 2단계 문제 프린터다! 으으 ㅠㅠ 어렵다.. 먼저 내가 푼 코드이다! def solution(priorities, location): cnt=0 while True: if priorities[0] < max(priorities): if location == 0: location = len..

e-you.tistory.com

 

7월달에 푼건데.. 어떻게 실력이 하나도 안늘수가 있지?.. 어렵다고 안느껴져서 다행이라고 생각해야할까 .. 왜 내 코드는 짧아지지가 않을까