포르그래머스 Lv2 프로세스
2024. 7. 8. 14:51ㆍ알고리즘문제 풀이/프로그래머스
문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/42587
풀이
큐를 이용한 문제이다.
큐를 이용하기 위해
우선 collection 중 deque를 import한다.
from collections import deque
우선순위 큐를 구현하기 위해
현재 큐에서의 순서와 우선순위를 보관한 리스트(pList)를 만든다.
그리고 이 리스트을 deque로 만들어 my_queue에 보관한다.
pList = []
for i, priority in enumerate(priorities):
pList.append([i, priority])
my_queue = deque(pList)
운영체제는 다음의 규칙에 따라 진행한다.
1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.
# 이미 실행한 프로세스를 담는 array
arr = []
while len(my_queue) != 0:
# 1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
popped_element = my_queue.popleft()
isMore = True
# 2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면
# 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
for item in my_queue:
if popped_element[1] < item[1]:
isMore = False
my_queue.append(popped_element)
break
# 3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
if isMore:
# 3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다.
arr.append(popped_element)
location: 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 매개변수
해당 프로세스가 몇 번째로 실행되는지 return
cnt = 0
for i, priority in arr:
cnt += 1
if location == i:
return cnt
전체 풀이
from collections import deque
def solution(priorities, location):
pList = []
for i, priority in enumerate(priorities):
pList.append([i, priority])
my_queue = deque(pList)
arr = []
while len(my_queue) != 0:
popped_element = my_queue.popleft()
isMore = True
for item in my_queue:
if popped_element[1] < item[1]:
isMore = False
my_queue.append(popped_element)
break
if isMore:
arr.append(popped_element)
cnt = 0
for i, priority in arr:
cnt += 1
if location == i:
return cnt'알고리즘문제 풀이 > 프로그래머스' 카테고리의 다른 글
| 프로그래머스 Lv.2 의상 (0) | 2024.07.10 |
|---|---|
| 프로그래머스 Lv.2 게임 맵 최단거리 (0) | 2024.07.09 |
| 프로그래머스 Lv2. 타겟 넘버 (0) | 2024.07.09 |
| 프로그래머스 Lv.2 다리를 지나는 트럭 (0) | 2024.07.09 |
| 프로그래머스 Lv.2 기능개발 (0) | 2024.07.08 |