algorithm/python
프로그래머스/스택,큐/프린터
아르르르를를르
2022. 6. 20. 18:02
https://programmers.co.kr/learn/courses/30/lessons/42587?language=python3
- 1차 풀이 (flag 사용)
from collections import deque
def solution(priorities, location):
answer = []
stack = deque([i for i in range(0, len(priorities))])
priorities = deque(priorities)
while priorities:
flag = 0
for priority in priorities:
if priority > priorities[0]:
flag = 1
break
else:
priorities.popleft()
answer.append(stack.popleft())
if flag:
item = priorities.popleft()
priorities.append(item)
item = stack.popleft()
stack.append(item)
return answer.index(location) + 1
- 2차 풀이 (훨씬 간결하고 효율적인 로직)
def solution(priorities, location):
queue = [(i, p) for i, p in enumerate(priorities)]
answer = 0
while True:
cur = queue.pop(0)
if any(cur[1] < q[1] for q in queue):
queue.append(cur)
else:
answer += 1
if cur[0] == location:
return answer