본문 바로가기
코딩테스트 연습

[프로그래머스/Python] Lv. 2 프로세스

by 빙수야 팥빙수야 2023. 6. 26.

안녕하세요.

이번 세 번째 글도 스택/큐 문제인 "프로세스"입니다.

 

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

👉 이 문제를 저는 큐(FIFO)를 이용해서 풀었습니다.

 

🔍 제가 짠 코드를 설명하자면,

1. 먼저 Linked List 기반의 Queue 인 deque를 import 해서 가져옵니다.

2. priorities를 deque로 형태로 바꿔줍니다.

3. while문을 돌면서 해당 location의 프로세스가 몇 번째로 실행되는지 확인합니다.

  • queue에서 가장 큰 값(= 우선순위가 가장 높은 값)을 m 변수에 저장합니다.
  • queue의 데이터를 꺼내고 dq 변수에 저장합니다.
  • queue에서 데이터를 꺼내서 길이가 1 줄어들었으므로 location 값 또한 -1 합니다.
  • dq와 m의 값이 같지 않다면 queue의 마지막에 다시 꺼낸 값을 넣습니다.
    • 그리고 location 값이 0 보다 작다면, 구하고자 하는 프로세스의 위치가 마지막으로 이동한 것이므로 len(queue) - 1을 합니다.
  • dq와 m의 값이 같다면 프로세스 하나를 실행했으므로 answer 값을 +1 합니다.

4. while문을 빠져나온 후 마지막으로 answer 값을 반환합니다.

 

from collections import deque

def solution(priorities, location):
    answer = 0
    queue = deque(priorities)
    
    while queue:
        m = max(queue)
        dq = queue.popleft()
        location -= 1
        
        if dq != m:
            queue.append(dq)
            if location < 0:
                location = len(queue) - 1
        else:
            answer += 1
            if location < 0:
                break
    
    return answer