문제
코드
My answer
import sys
input=sys.stdin.readline
from collections import deque
tc=int(input())
for _ in range(tc):
n,m=map(int,input().split())
imp=deque(map(int,input().split()))
doc=deque([i for i in range(n)])
i=1
m=doc[m]
while(1):
if(max(imp)==imp[0]):
if(doc[0]==m):
print(i)
break
else:
imp.popleft()
doc.popleft()
i+=1
else:
imp.append(imp.popleft())
doc.append(doc.popleft())
Another answer
test_case = int(input())
for _ in range(test_case):
n, m = list(map(int, input().split(' ')))
queue = list(map(int, input().split(' ')))
queue = [(i, idx) for idx, i in enumerate(queue)]
count = 0
while True:
if queue[0][0] == max(queue, key=lambda x: x[0])[0]:
count += 1
if queue[0][1] == m:
print(count)
break
else:
queue.pop(0)
else:
queue.append(queue.pop(0))
풀이
우선 큐를 이용하여, 현재 문서의 중요도가 가장 크면, 뽑으면서 i를 올려주고, 그렇지 않다면 다시 popleft를 하여 맨뒤에 추가해주는 방식으로 중요도를 신경쓰며 문서를 출력하도록했다. 단 문서의 중요도가 중복될 경우에는 현재 뽑고자 하는 문서가 정확히 무엇인지를 알아야하기 때문에 문서들을 구별할수 있는 doc라는 임의의 문서이름 변수를 만들어 해당 문서가 출력될 때 정답을 출력하고 종료하도록 했다.
큐를 2개를 이용하여, 문서이름, 문서중요도를 관리해야하는 문제였다.
another answer의 경우, 큐를 한개를 생성하되, 하나의 큐 원소에 중요도와 문서를 동시에 넣어 관리하였다.
나도 이 방법을 생각했었는데, 중요도가 가장 큰 문서를 뽑을 때 max함수가 적용되지 않아 다른 방법을 찾았었는데, 여기서 lambda함수를 이용하여 중요도를 기준으로 max를 뽑는 방법을 알게되었다.
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python] 백준 #5397- 키로거 (0) | 2022.01.25 |
---|---|
[Python] 백준 #1021- 회전하는 큐 (0) | 2022.01.23 |
[Python] 백준 #2776- 암기왕 (0) | 2022.01.23 |
[Python] 백준 #10546- 배부른 마라토너 (0) | 2022.01.23 |
[Python] 백준 #14425- 문자열집합 (0) | 2022.01.22 |