룰루코딩

백준 1966 프린터 큐 본문

백준

백준 1966 프린터 큐

rulru01 2024. 10. 27. 19:38

문제


솔루션

T = int(input())
for _ in range(T):
    n,m = map(int,input().split())
    stack = list(map(int,input().split()))
    
    result = 1
    while stack:
        if stack[0] < max(stack):
            stack.append(stack.pop(0))
            
        else:
            if m==0:
                break
        
            stack.pop(0)
            result+=1
        
        m = m -1 if m>0 else len(stack) -1
        
    print(result)

깨달은 점

처음에 문제가 제대로 이해가지 않았는데 

맨처음 테스트케이스 수를 입력한후

n,m 에 총 문서개수와 궁금한 문서의 인덱스이고

그다음줄에 중요도이다.

예를 들면

4 2

1 2 3 4

일때 총 4개의 문서 중 2번째 문서가 몇번째로 인쇄되는지를 출력해야한다.

중요도는 1234로 2번째문서는 2번째로 인쇄된다.

 

코드 설명

    while stack:

스택이 빌때까지 계속 반복하여 과정 진행

        if stack[0] < max(stack):
            stack.append(stack.pop(0))

stack[0]은 현재 인쇄 대기열의 첫 번째 문서이다.

stack[0]이 stack 내에서 가장 높은 우선순위가 아니라면(다른 문서들이 더 높은 우선순위라면)

첫 번째 문서를 pop하여 맨 뒤로 보낸다. ->우선순위가 높은 문서가 먼저 인쇄되도록

        else:
            if m==0:
                break

stack[0]이 가장 높은 우선순위인 경우

-> 현재 문서가 목표 문서(m == 0)라면 반복문을 종료

            stack.pop(0)
            result+=1

목표 문서가 아니라면 현재 문서를 인쇄(pop(0))하고ㅡ 인쇄된 문서 개수(result)를 증가시킴

        m = m -1 if m>0 else len(stack) -1

 

m은 목표 문서의 위치, 문서가 한 칸 앞으로 이동할 때마다 m을 업데이트

목표 문서가 0번째에 있을 경우(m == 0), m을 len(stack) - 1로 설정하여 목표 문서가 맨 뒤로 이동

 

 

 

'백준' 카테고리의 다른 글

백준 1874 스택 수열  (0) 2024.10.27
백준 4949 균형잡힌 세상  (0) 2024.10.27
백준 18258 큐2  (0) 2024.10.26
백준 28278 스택2  (0) 2024.10.14
백준 2231 분해합  (2) 2024.10.12