[programmers/py] 프로세스

승민·2024년 2월 8일

알고리즘

목록 보기
51/171

프로세스

https://school.programmers.co.kr/learn/courses/30/lessons/42587

문제 설명

순서
1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.

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

설명

  1. location==index일 경우 index의 실행 순서를 반환해야해서 [우선순위, index]형식의 배열을 생성합니다.
  2. 배열의 맨 처음 index를 빼주고 값을 비교합니다.
    -1. 만약 pop한 우선순위가 최대 우선순위보다 작으면 다시 append
    -2. 크거나 같으면 최대 우선순위를 변경, count 증가 후 우리가 찾는 index인지 확인합니다.
def solution(priorities, location):
    count = 0
    big_p = sorted(priorities, key=lambda x: -x)
    arr = [(v,i) for i,v in enumerate(priorities)]
    idx = 0
    
    while True:
        p, i = arr.pop(0)
        
        # 우선 순위와 같을 떼
        if p >= big_p[idx]:
            count += 1
            idx += 1
            if i == location:
                return count
        else : # 작을 때
            arr.append((p,i))

0개의 댓글