https://programmers.co.kr/learn/courses/30/lessons/42587
문제만 봐도 우선순위에 따라 인쇄할 종이를 앞에서 맨뒤로 보내야할 일이 많을것 같았으므로 일단 deque 를 사용했다.
나의 경우, 순서를 기록하고 있는 배열을 추가로 만들어서 우선순위 배열의 값이 조정될때 (맨뒤로 보내거나 프린트될때)
순서배열 역시 동일하게 기록을 해줬고, 프린트해야하는 시점의 값이(순서가) location 과 동일하다면 기록해뒀던 answer 를 출력한다.
한번 풀어봤었던 문젠데 기억이 가물가물해서 다시한번 풀어봤다..
그리 어렵지 않게 잘 풀렸다.
from collections import deque
def solution(priorities, location):
answer = 0
d = deque(priorities)
temp = deque([x for x in range(len(d))])
while d:
p = d.popleft()
if d:
if p < max(d):
temp.append(temp.popleft())
d.append(p)
else:
answer += 1
if temp[0] == location:
return answer
else:
temp.popleft()
return answer + 1
print(solution([1, 2, 3, 4, 5], 0))
# [2, 1, 3, 2] 2 1
# [1, 1, 9, 1, 1, 1] 0 5
내가 푼 방식과 원리는 같은데 enumerate 를 사용하여 한결 깔끔한 풀이
from collections import deque
def solution(priorities, location):
temp = deque([(v, i) for i, v in enumerate(priorities)])
ans = 0
while temp:
val = temp.popleft()
if temp and val[0] < max(temp)[0]:
temp.append(val)
else:
ans += 1
if val[1] == location:
break
return ans
print(solution([1, 7, 7, 3, 3, 6, 9, 4], 4))