알고리즘 공부(C++)

1966 프린터 큐

혀니리리 2022. 8. 10. 15:59
728x90

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

 

1966번: 프린터 큐

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

www.acmicpc.net

tnum = int(input())
temp = []
for _ in range(tnum):
    N,M = map(int, input().split())
    pr = list(map(int, input().split()))
    temp = [0 for _ in range(N)] 
    temp[M] = 1
    count = 0

    while True:
        if pr[0] == max(pr):
            count += 1
            if temp[0] != 1:
                pr.pop(0)
                temp.pop(0)
            else:
                print(count)
                break
        else:
            pr.append(pr[0])
            temp.append(temp[0])
            del pr[0]
            del temp[0]

이 문제는 주어진 인덱스가 어느 위치에 있는지, 몇번째로 프린터에서 출력되게 해야하는지를 구하는 문제이다.

우선,같은 크기의 두가지 배열의 인덱스가 필요하다는 아이디어까지는 있었는데 실현시키진 못했었다.

1.실제 값을 담는 배열

2.인덱싱된 값을 담는 배열

두 가지를 같이 움직여야 한다.

이 문제의 답을 가장 탐욕적으로 구하기 위해서는 (아마) 정렬되면 첫번째에 있는 수는 빠져나가게 하고, 그렇게 계속 빠져나가게 하면서 우리가 구하고자 하는 그 값이 출력될 때 지금까지 저장했던 count값을 출력하면 되는 문제였다.

우선 queue의 구조를 알아야 한다.

del pr[0] = pr.pop[0]와 같은 역할로, 해당하는 인덱스의 값을 배열에서 지우는 역할을 할 수 있다.

max(pr) 배열에서 가장 큰 값을 나타내는 역할을 한다.

728x90

'알고리즘 공부(C++)' 카테고리의 다른 글

1476 날짜 계산  (0) 2022.08.12
1436 영화감독 숌  (0) 2022.08.11
11047 코인  (0) 2022.08.09
10773 제로  (0) 2022.08.09
7568 덩치  (0) 2022.08.08