백준 1966 - 프린터 큐 (Python3)
코드
큐활용
from collections import deque
# 테스트 케이스 개수 받는 변수
t = int(input())
for _ in range(t):
# n : 문서의 개수, m : 원하는 문서가 있는 위치
n, m = map(int, input().split())
# 중요도 받을 덱 생성
deq = deque(map(int, input().split()))
# 최종적으로 원하는 문서가 마지막으로 위치할 값을 담을 변수
final_idx = 0
while deq:
# 중요도가 가장 높은 값 담을 변수
max_ = max(deq)
# 첫번째 요소를 일단 제거
first = deq.popleft()
# 요소가 하나씩 줄 때마다 원하는 위치값도 1씩 작아짐
m -= 1
# 첫번째 요소와 가장 높은 중요도와 같다면 원하는 문서의 마지막 위치값 +1
if max_ == first:
final_idx += 1
# m이 음수 => 원하는 문서의 위치값에 도달
if m < 0:
print(final_idx)
break
else:
deq.append(first)
if m < 0:
m = len(deq) - 1
리스트 활용
t = int(input())
for _ in range(t):
n, m = map(int, input().split())
# 중요도를 담을 리스트
docu_p_list = list(map(int, input().split()))
# 원하는 문서의 현재 위치를 담을 리스트
docu_p_idx = [0 for _ in range(n)]
# m번째 요소의 값만 1로 변환
docu_p_idx[m] = 1
# 최종적으로 출력할 값
final_idx = 0
while True:
# 맨 처음 요소와 가장 높은 중요도가 일치하지 않는 경우
if docu_p_list[0] != max(docu_p_list):
# 앞에서 지우고 뒤로 보낸다
docu_p_list.append(docu_p_list[0])
docu_p_idx.append(docu_p_idx[0])
docu_p_list.pop(0)
docu_p_idx.pop(0)
# 맨 처음 요소가 가장 높은 중요도인 경우
else:
final_idx += 1
# 1이 아니라면 원하는 문서가 아니니까 리스트에서 삭제
if docu_p_idx[0] != 1:
docu_p_list.pop(0)
docu_p_idx.pop(0)
else:
print(final_idx)
break
문제 해설
원하는 요소의 위치값에 대한 코드를 작성하는 것이 처음에 접근하기 어려웠다. 또한 deque를 활용할 때 중요도가 가장 높은 값을 담는 변수를 선언하는 것을 첫번째 요소를 제거하는 것보다 먼저 시행해줘야만 에러가 발생하지 않는데 이 부분을 계속 놓쳐서 시간을 상당히 많이 낭비하였다…ㅠㅠ
댓글남기기