문제
풀이
location은 priorities의 인덱스 번호다.
즉 priorities 리스트가 주어질 때 가장 높은 순서대로 프로세스가 작동할 때, priorities의 인덱스인 location이 몇 번째로 작동하는지 반환하는 문제다.
문제의 제시에서 priorities는 길이가 100이므로 2중 반복문이 가능하다.
그러므로 priorities를 앞에서 순서대로 꺼내서 꺼낸 수 보다 더 높은 수가 priorities에 있는지 확인하고, 더 높은 수가 있다면 꺼낸 수는 다시 집어넣고 꺼낸 수가 가장 높다면 순서를 센다.
순서를 세고 난 후 꺼낸 수의 인덱스가 location과 같다면 그 순서를 반환하면 된다.
코드
from collections import deque
def solution(priorities, location):
answer = 0
p = [(i, v) for i, v in enumerate(priorities)] # enumerate는 '인덱스, 값'을 순서대로 반환한다.
dQ = deque(p) # 최대 길이가 100이기에 리스트로 해도 무관하지만 연산을 줄이기 위해 큐 자료구조를 사용한다.
while dQ:
x = dQ.popleft() # x는 (인덱스, 수)가 반환된다.
for i in dQ:
if x[1] < i[1]: # 꺼낸 수보다 큰 수가 priorities에 있는지 확인한다.
dQ.append(x) # 더 큰 수가 있다면 차례가 아니므로 다시 dQ에 넣는다.
break # 뒤는 더 볼 필요가 없다.
else: # else문까지 왔다는 것은 for문이 break를 만나지 않았다는 것이므로 현재 priorities에서 가장 큰 수이며 현재 가장 빠른 프로세스 순서를 의미한다.
answer += 1 # 순위를 매긴다.
if x[0] == location: # 그 인덱스가 location과 같다면 return 한다.
return answer