본문 바로가기
알고리즘/백준

백준 실버3 1966. 프린터 큐 (python)

by 개발하는 호랑이 2024. 2. 20.

프린터 큐

풀이

큐의 방식에 대해서 고려한다면 금방 풀 수 있을 것 같다 생각했고, 예상은 맞았다.
아래처럼 우선 Q를 while문으로 Q값이 있을 때 반복했다.
그리고 Q [0]가 최댓값이면 출력하고 아니면 마지막으로 옮기는 작업을 하는 과정에서 M과 출력 순서인 number를 건드렸다.

import sys

# 테스트 케이스 수
T = int(sys.stdin.readline())

for i in range(T):
    # 문서갯수 N, 궁금한 문서는 몇 번째? M
    N, M = map(int, sys.stdin.readline().split())
    # Q리스트
    Q = list(map(int, sys.stdin.readline().split()))
    # Q가 있을 때만 작동
    number = 0
    while Q:
        # 뽑아내는 값이 제일 큰 값이면
        if Q[0] == max(Q):
            Q.pop(0)
            number += 1
            if M == 0:
                break
            else:
                M -= 1
        # 아니면
        else:
            # 빼서 뒤로 돌려보내기
            tmp =  Q.pop(0)
            Q.append(tmp)
            if M == 0:
                M = len(Q) -1
            else:
                M -= 1
    print(number)

다른 사람 풀이

주어진 문서의 중요도와 인덱스를 튜플 형태로 리스트에 저장한 후 중요도가 높은 순서로 문서를 재배치하는 방식으로 사용하였다.

N=int(input())

for i in range(N):
    n,res=map(int,input().split())
    val=list(map(int,input().split()))

    result=[]
    for i in range(n):
        result.append((val[i],i))
    
    count=0
    cnt=0
    for k in range(n):
        for i in range(n):
            flag=0
            for j in range(cnt+1,n):
                if result[cnt][0]<result[j][0]:
                    result.append(result[cnt])
                    result.pop(cnt)
                    flag=1
                    break
            if flag==0:
                cnt+=1

    for i in range(n):
        a,k=result[i]
        if k== res:
            print(i+1)