본문 바로가기
BOJ

[python] 백준 1966번 - 프린터 큐

by yujinkimkim 2023. 2. 5.

1966번: 프린터 큐 (acmicpc.net)

 

1966번: 프린터 큐

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

www.acmicpc.net

우선 실험을 하나 했는데용

from collections import deque

q = deque(enumerate(map(int, input().split())))
a = q.popleft()
q.append(a)

for i, j in q:
    print(i,'',j)

하나 더 했습니당

첫번째 시도! 장렬히 실패!

import sys
from collections import deque

input = sys.stdin.readline

N = int(input())

for i in range(N):
    cnt = 0
    n, m = map(int,input().split())

    q = deque(enumerate(map(int,input().split())))

    arr = []
    for a, b in q:
        arr.append(b)

    while q:
        idx, x = q.popleft()
        for num in range(x+1, 10):
            if num in arr[idx:]:
                q.append(temp)
                break
            else:
                cnt += 1
        if idx == m:
            break
    print(cnt+1)

이건 예제조차 안 돌아감!!

 

두번째 실패!! 장렬히 실패!!

import sys
from collections import deque

input = sys.stdin.readline

N = int(input())

for i in range(N):
    cnt = 0
    n, m = map(int,input().split())

    q = list(map(int,input().split()))
    s = q[m]

    while q:
        Max = 0
        for j in q:
            if j > Max :
                Max = j
        q.remove(Max)
        cnt += 1

        if Max == s:
            break

    print(cnt)

당연함 같은 숫자 여러개 있을 거 고려 1도 안 한 코드임

 

힝 ㅠ 구글링 돌리러 감니다 😮‍💨ヽ(*。>Д<)o゜


import sys
from collections import deque

input = sys.stdin.readline

N = int(input())

for i in range(N):
    cnt = 0
    n, m = map(int,input().split())

    q = deque(list(map(int,input().split())))

    while q:
        best = max(q)
        front = q.popleft()
        m -= 1

        if best == front:
            cnt += 1
            if m < 0:
                print(cnt)
                break

        else:
            q.append(front)
            if m < 0:
                m = len(q) - 1

구글링 하고 왔슴니당~~

엄청난 코드,,발견,,!

여기서 m이 0 이면 내가 궁금한 애가 맨 앞에 있다는 거고

1씩 빼서 계속 순서가 당겨지는 거 표현

최댓값이랑 맨 앞에 있는 값을 담은 변수가 필요한데

맨앞에 값을 pop해서 최댓값이랑 비교해서

-둘이 같으면 cnt 증가, m<0면 내가 궁금한 게 맨앞에 있었다는 거니까 print 해주고 break해주고

-둘이 다르면 다시 맨 뒤로 넣어주고, m<0이면 내가 궁금한 애가 맨앞에 있다가 다시 뒤로 간 거니까 len(q) - 1 로 넹

 

나는 m을 바꿀 생각을 안 했었는데

저렇게 m에서 1씩 빼면서 당기는 거 표현하고 

~(>_<。)\

 

지금 실은 저렇게 막 도전하다가 졸려서

자고 왔는데 9시간 자는 바람에

좀 비몽사몽이에용

댓글