파이썬/Algorithms
백준(BAEKJOON) 1966 프린터큐
hanshow113
2021. 2. 13. 21:19


입력 형식 :
3 # 테스트 케이스(3번 테스트)
1 0 # 1개의 문서, 출력하고자 하는 문서의 순서는 0번째
5 # 1개 문서의 중요도
4 2 # 4개의 문서, 출력하고자 하는 문서의 순서는 2번째
1 2 3 4 # 4개 문서의 중요도
6 0 # 6개의 문서, 출력하고자 하는 문서의 순서는 0번째
1 1 9 1 1 1 # 6개 문서의 중요도
* 단, 문서의 순서를 나타내는 수는 0부터 시작
처음에는 key-value로 출력하고자 하는 문서의 순서를 기억하고자 했으나, 괜히 다루기 복잡해지는 것 같아서 단순 list in dex로 접근
logic :
input으로 받은 테스트케이스만큼 for문을 통해 문서 개수와 중요도를 입력받음
각 for문 iteration 내에서 items(문서 중요도 리스트), items_idx(문서 출력 인덱스)를 입력
items_idx를 굳이 순서대로 매길 필요없이 모두 0인 list로 만든 후에 items_idx[출력하고자하는 문서 순서] = 1로 두고 진행
이후 문서 리스트 가장 처음 값이 최대값과 같으면 리스트에서 제거하고 cnt를 1 추가.
아닌 경우는 리스트의 가장 마지막으로 보내는 방식으로 해결
numbers = int(input())
for number in range(numbers):
item_num, item_loc = map(int, input().split())
items = list(input().split())
items_idx = [0 for item in items]
items_idx[item_loc] = 1
cnt = 1
while True:
if items[0] == max(items):
if items_idx[0] == 1:
print(cnt)
break
items.pop(0)
items_idx.pop(0)
cnt += 1
else:
items.append(items.pop(0))
items_idx.append(items_idx.pop(0))