코딩코딩코딩

백준(BAEKJOON) 1966 프린터큐 본문

파이썬/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))

 

Comments