https://www.acmicpc.net/problem/1966
#Solution
다음과 같은 알고리즘을 통해 파악할 수 있다.
1) prior_number에 모든 수를 넣어서 우선 순위 maximum 숫자를 확인할 때 쓴다. max(prior_number)
2) 큐 안에 N만큼의 index를 넣는다.
3) sequence로 해당 숫자가 몇 번째로 꺼내지는 지를 표시한다.
4-1-1) 큐의 맨 처음 index에 해당하는 printer_list의 숫자가 우선 순위가 가장 높다면 이를 result에 담는다.
4-1-2) prior_number에서 가장 큰 수를 하나 지워준다.
4-2) else: 가장 높은 우선순위가 아니라면 큐 첫번째를 큐의 가장 뒷부분으로 다시 보낸다.
4-3) 반복한다.
case = int(input())
for _ in range(case):
N, M = map(int, input().split())
print_list = list(map(int, input().split()))
prior_number = []
#우선 순위를 탐색하기 위한 리스트
for doc in print_list:
prior_number.append(doc)
#큐 안에 index를 넣어 탐색
result = [0 for _ in range(N)]
queue = [i for i in range(N)]
sequence = 1
while queue:
if print_list[queue[0]] == max(prior_number):
prior_number.remove(max(prior_number))
result[queue.pop(0)] = sequence
sequence += 1
else:
queue.append(queue.pop(0))
print(result[M])
'Programming [Python] > 백준 알고리즘 솔루션' 카테고리의 다른 글
#113 백준 파이썬 [10845] 큐 (0) | 2019.09.29 |
---|---|
#112 백준 파이썬 [10866] 덱 (0) | 2019.09.29 |
#110 백준 파이썬 [17298] 오큰수 - 스택 (0) | 2019.09.27 |
#109 백준 파이썬 [1874] 스택 수열 (0) | 2019.09.27 |
#108 백준 파이썬 [1655] 가운데를 말해요 - 힙, 우선순위 큐 (0) | 2019.09.27 |