카테고리 없음

[python] [프로그래머스] [lv2] 프로세스

구리멍구리 2024. 3. 10. 11:59
반응형

문제 설명

문제 설명
운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다.

더보기


1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
  3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.
예를 들어 프로세스 4개 [A, B, C, D]가 순서대로 실행 대기 큐에 들어있고, 우선순위가 [2, 1, 3, 2]라면 [C, D, A, B] 순으로 실행하게 됩니다.


현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location이 매개변수로 주어질 때, 해당 프로세스가 몇 번째로 실행되는지 return 하도록 solution 함수를 작성해주세요.

 

제한 사항

입출력 예, 설명


문제풀이

문제를 풀때 저번에 생각했던 대로 가이드 라인을 작성하고 풀었다. 문제를 풀기전 가이드라인과 풀고 나서의 코드플로우는 조금 달랐다. 예를 들면 예외 처리 같은 부분인데 계속 하다보면 예외 처리 부분도 풀기전에 떠올릴수 있을까 싶다.

가이드라인 & 나의 풀이

## priorities : 실행대기 큐 , loaction : 추적해야되는 프로세스 인덱스 번호

# 1. 큐에서 왼쪽 요소를 뽑는다

# 2. 뽑은 요소와 왼쪽에 남아있는 큐들과 우선순위를 비교한다

    # 2-1 우선순위가 더 높은게 있다면 뽑은 요소를 오른쪽에 넣는다.
        # 2-1-1 loaction을 변경해서 프로세스 인덱스 번호를 추적한다.
        
    # 2-2 우선순위가더 높은게 없다면 loaction을 출력한다.

from collections import deque
    
def solution(priorities, location):
    answer = 0
    deq_list = deque(priorities)

    while True:
        pop=deq_list.popleft()

        # 마지막 요소일때 - 추가된 예외처리
        if len(deq_list)==0:
            return answer+1
    
        # 2번에 해당
        if pop<max(deq_list):
            deq_list.append(pop)
        else:
            answer+=1
            if location==0:
                return answer

        # 위치 추적
        if location==0:
            location=len(deq_list)-1
        else:
            location-=1
반응형