반응형
문제:
여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다.
예를 들어 Queue에 4개의 문서(A B C D)가 있고, 중요도가 2 1 4 3 라면 C를 인쇄하고, 다음으로 D를 인쇄하고 A, B를 인쇄하게 된다. 여러분이 할 일은, 현재 Queue에 있는 문서의 수와 중요도가 주어졌을 때, 어떤 한 문서가 몇 번째로 인쇄되는지 알아내는 것이다. 예를 들어 위의 예에서 C문서는 1번째로, A문서는 3번째로 인쇄되게 된다. |
입력
첫 줄에 test case의 수가 주어진다. 각 test case에 대해서 문서의 수 N(100이하)와 몇 번째로 인쇄되었는지 궁금한 문서가 현재 Queue의 어떤 위치에 있는지를 알려주는 M(0이상 N미만)이 주어진다. 다음줄에 N개 문서의 중요도가 주어지는데, 중요도는 1 이상 9 이하이다. 중요도가 같은 문서가 여러 개 있을 수도 있다. 위의 예는 N=4, M=0(A문서가 궁금하다면), 중요도는 2 1 4 3이 된다. |
출력
각 test case에 대해 문서가 몇 번째로 인쇄되는지 출력한다. |
for _ in range(int(input())):
arr_size, index = map(int, input().split(' '))
q = list(map(int, input().split(' ')))
pr = [0 for _ in range(arr_size)]
pr[index] = 'Target' #index를 타겟으로 설정
count = 0
while True:
if q[0] == max(q): #현재 값이 출력 대상이라면
count += 1
if pr[0] == 'Target': #타겟이 맞는지
print(count)
break
else:
q.pop(0) #아닌 건 뺀다
pr.pop(0)
else:
q.append(q.pop(0)) #뺀 걸 추가한다
pr.append(pr.pop(0))
문서의 수 N의 길이를 갖는 배열(pr)을 만들어 원하는 M번째 원소를 식별해낼 수 있도록 ‘T’값으로 초기화
priority[0]값이 max(priority)값과 동일하다면 현재의 문서가 큐의 문서 중 가장 높은 중요도 값을 갖는다면 첫번째 조건을 만족한다.
Chk[0] = ‘T’를 찾아 원하는 값이 되어 중요도값, 인덱스 값을 pop한다.
반응형
'백준' 카테고리의 다른 글
[백준알고리즘] 11651번 좌표정렬하기2 파이썬 python (0) | 2020.09.29 |
---|---|
[백준알고리즘] 3009번 네번째점 파이썬 (0) | 2020.09.29 |
[백준알고리즘]18258번 큐2 파이썬python (0) | 2020.08.31 |
[백준알고리즘]10773번 제로 python (0) | 2020.08.08 |
[백준알고리즘]10828번 스택 python (0) | 2020.08.07 |