❓ 문제 - 백준 프린터 큐 1965번 - python 풀이법
출처
(https://www.acmicpc.net/problem/1966)
📝 문제해결법
1. 이 문제의 핵심은 Queue를 이용하는 것이다.
- 우선 테스트케이스 안에서 queue에 넣을 숫자가 1개라면 1을 출력
- 만약 테스트케이스 안에서 queue에 넣을 숫자가 여러 개라면 queue에 해당 숫자의 중요도와 인덱스를 append
- queue가 빌 때까지 while문을 돌면서 queue에서 중요도랑 index를 popleft하고 queue에 남은 숫자들 중에 중요도의 최대값을 찾아서 queue에서 popleft한 중요도가 더 크거나 같다면 만약 index가 빠져나간 순서가 궁금한 index와 동일한지 살피고 동일하다면 count 출력하고 break, 동일하지 않다면 count를 1 증가
- queue에 남은 숫자들 중에 중요도의 최대값을 찾아서 queue에서 popleft한 중요도가 더 큰지 비교해서 만약 queue에서 popleft한 중요다가 더 작다면 다시 queue에 중요도와 index를 넣어줌
💻 소스코드
from collections import deque
for tc in range(int(input())):
n, m = map(int, input().split())
if n == 1:
data = int(input())
print(1)
else:
data = list(map(int, input().split()))
queue = deque()
for d in range(len(data)):
queue.append((data[d], d))
count = 1
while queue:
d, index = queue.popleft()
max_value = 0
for k in range(len(queue)):
max_value = max(queue[k][0], max_value)
if d >= max_value:
if index == m:
what = True
print(count)
break
else:
count += 1
else:
queue.append((d, index))
🧐 Ellen's Thinking
n의 범위가 1<=n<=10 였기때문에 최대값으로 해결할 수 있었다.
'알고리즘 > 알고리즘문풀' 카테고리의 다른 글
BOJ - 인구 이동 16234번 (python) (0) | 2021.10.04 |
---|---|
BOJ - 연구소 14502번 (python) (0) | 2021.10.01 |
BOJ - 탑 2493번 (python) (0) | 2021.09.23 |
BOJ - 괄호 제거 2800번 (python) (2) | 2021.09.22 |
BOJ - 스택 수열 1874번 (python) (0) | 2021.09.06 |