안녕하세요. 오늘은 백준 알고리즘 1966번 프린터 큐를 풀어보았습니다.
먼저 입/출력을 받을 변수와 대략적인 코드 진행의 가이드라인을 그려보겠습니다.
입력 : 테스트케이스의 수, 문서의 개수, 원하는 문서의 인덱스, 중요도
출력 : 원하는 문서의 인쇄 순서
대략 2~3가지의 해결 방법이 떠오르는데, 이번 풀이에서는 우선순위를 리스트에 저장 해두었다가
중요도를 비교하여 제일 높은 중요도일 경우 추가하고, 아닐 경우 맨 뒤로 보내는 방법으로 풀이해보겠습니다.
priority 리스트에 우선순위를 입력하고
queue 덱에 원하는 문서의 인덱스, 그 문서의 우선순위를 튜플로 삽입합니다.
그 뒤 반복을 통해 현재 큐의 우선순위가 제일 높은 우선순위일 경우:
우선순위 리스트 priority에서 현재 우선순위를 제거해줍니다.
현재 큐의 우선순위가 제일 높은 우선순위가 아닐 경우:
queue의 맨 뒤에 현재 큐를 추가하고
현재 큐를 삭제시켜줍니다.
이렇게 priority가 빌 때 까지 연산을 반복하면 원하는 결과가 정렬되겠습니다.
그 후 queue에서 원하는 인덱스를 찾아 출력해주면 끝입니다.
<풀이 코드>
from collections import deque
import sys
loop = int(sys.stdin.readline())
for _ in range(loop):
doc_count, index = map(int, sys.stdin.readline().split())
priority = list(map(int, sys.stdin.readline().split()))
queue = deque([(i, priority[i])for i in range(doc_count)])
idx = 0
while idx < doc_count:
if queue[idx][1] == max(priority):
priority.remove(queue[idx][1])
idx += 1
else:
queue.append(queue[idx])
queue.remove(queue[idx])
for i in range(doc_count):
if queue[i][0] == index:
print(i + 1)
break
What does not destroy me, makes me stronger. - Friedrich Nietzsche
아직 모자라지만, 항상 배우고, 나아가려합니다.
오타 / 오류 / 개선점 / 질문 환영합니다 ^^
'백준 알고리즘 (Baekjoon Algorithm)' 카테고리의 다른 글
[파이썬] 백준 알고리즘 No.1946 신입 사원 (0) | 2021.12.05 |
---|---|
[파이썬] 백준 알고리즘 No.10610 30 (0) | 2021.12.05 |
[파이썬] 백준 알고리즘 No.2217 로프 (0) | 2021.12.05 |
[파이썬] 백준 알고리즘 No.1026 보물 (0) | 2021.12.04 |
[파이썬] 백준 알고리즘 No.1759 암호 만들기 (0) | 2021.12.03 |