[코테] 큐 - 프로세스[프로그래머스]

Bpius·2023년 6월 25일
0

알고리즘 문제풀이

목록 보기
28/28
post-thumbnail

문제

출처: 프로그래머스 - 프로세스

풀이

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
profile
데이터 굽는 타자기

0개의 댓글