Programming/BackJoon

1966 - 프린터 큐

홍열 2023. 3. 15. 08:43
728x90

1) 문제 설명

프린터 작업을 하는데, 우선순위를 두고 해야한다. 

주어진 프린터 작업 리스트 중에서 우선순위가 가장 높은것부터 출력하고, 내 뒤에 나보다 우선순위가 높은게 있으면 출력하지 않는다. 

 

2) 문제 분석

Queue를 사용해서 푸는 문제

우선순위까지는 알겠는데, index를 어떻게 같이 저장할 것인지 고민 필요 -> 튜플형태로 (value, idx)로 저장

 

enumerate를 사용해서 idx와 우선순위를 쉽게 저장할 수 있다. 

lst = [1,2,3,4]

for idx, value in enumerate(lst):
    print(idx, value)

 

우선순위를 튜플에 먼저 저장한 이유는 max값을 찾을때 쉽게 하려고 그랬다

import sys
t = int(input())
while t > 0:
    n, m = map(int, input().split())
    lst = list(map(int, sys.stdin.readline().rstrip().split()))

    # 튜플로 만들어보자 - 리스트 컴프리헨션
    tuple_lst = [(val, idx) for idx, val in enumerate(lst)]

    cnt = 0
    while True:
        # tuple의 맨 처음과 제일 큰 값이 같을 경우
        if tuple_lst[0][0] == max(tuple_lst, key=lambda temp: temp[0])[0]:
            cnt += 1
            if tuple_lst[0][1] == m:
                print(cnt)
                break
            else:
                tuple_lst.pop(0)
        else:
            tuple_lst.append(tuple_lst.pop(0))    
            
    t -= 1