

Problem
https://school.programmers.co.kr/learn/courses/30/parts/12081
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것이다.
운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내라.
- 실행 대기 큐(Queue)에서 대기중인 프로세스를 하나 꺼낸다.
- 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 큐에 다시 넣는다.
- 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행한다.
- 한번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료된다.
예를 들어, 프로세스 4개
실행 대기 큐에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities 와, 몇번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location 이 매개변수로 주어질때, 해당 프로세스가 몇 번째로 실행되는지 반환해라.
Input / Output Example
priorities | location | return |
[2,1,3,2] | 2 | 1 |
[1,1,9,1,1,1] | 0 | 5 |
Solution
파이썬의 deque(데크) 자료구조를 활용하면 된다.
일반적으로 queue(큐)는 FIFO(선입선출) 로 작동하는데 deque는 양방향 큐로 큐의 앞/뒤에서 element를 enqueue/dequeue 할 수 있다.
deque를 사용하여, 문제에서 언급한 프로세스의 실행 규칙을 구현하기만 하면 된다.
사실, del list[0]을 적절히 활용하면 deque를 사용하지 않고, list만으로 구현할 수 있다.
하지만 새로운 자료구조도 활용해볼겸, 아래와 같이 코드를 작성했다.
Code
from collections import deque
def solution(priorities, location):
answer = 0
deq = deque()
for i in range(priorities.__len__()):
deq.append({
'priority': priorities[i],
'loc': True if i == location else False
})
while deq.__len__() != 0:
now = deq.popleft()
if deq.__len__() == 0:
answer += 1
break
max_value = max(deq, key=lambda x:x['priority'])
if now['priority'] < max_value['priority']:
deq.append(now)
continue
if now['loc']:
answer += 1
break
answer += 1
return answer
deque와 함께 index를 보다 편리하게 관리하기 위해 dict 자료구조를 함께 활용했다.
먼저 데크에 모든 프로세스를 등록하고, 데크에서 하나씩 빼면서 프로세스의 실행 규칙을 따라가면 된다.
만약 해당 프로세스를 실행한다면, 그 프로세스가 실행위치를 알고싶은 프로세스에 해당한다면 while 반복문을 멈추면 된다.
'Coding > PS' 카테고리의 다른 글
프로그래머스 고득점 Kit - 이중 우선순위 큐 (0) | 2025.01.29 |
---|---|
프로그래머스 고득점 Kit - 올바른 괄호 (0) | 2025.01.28 |
프로그래머스 고득점 Kit - 더 맵게 (0) | 2025.01.28 |
프로그래머스 고득점 Kit - 다리를 지나는 트럭 (0) | 2025.01.28 |
프로그래머스 고득점 Kit - 폰켓몬 Python (0) | 2025.01.08 |
소프트웨어학과 현주씌의 일상을 담는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!