문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42587
문제 설명
운영 체제가 다음 규칙에 따라 프로세스를 관리할 경우 프로세스가 몇 번째로 실행되는지 알아내야 한다.
규칙
1. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다.
2. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다.
3. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다.
3-1. 한번 실행한 프로세는 다시 큐에 넣지 않고 그대로 종료합니다.
제한 사항
- priorities의 길이는 1 이상 100 이하입니다.
- priorities의 원소는 1 이상 9 이하의 정수입니다.
- priorities의 원소는 우선순위를 나타내며 숫자가 클 수록 우선순위가 높습니다.
- location은 0 이상 (대기 큐에 있는 프로세스 수 - 1) 이하의 값을 가집니다
- priorities의 가장 앞에 있으면 0, 두 번째에 있으면 1 ... 과 같이 표현합니다.
✅ Code - 성공
from collections import deque
def solution(priorities, location):
answer = 0
q = deque()
for i in range(len(priorities)):
q.append((priorities[i], i))
while True:
pri_max = max(item[0] for item in q)
pri, inx = q.popleft()
if pri < pri_max:
q.append((pri, inx))
else:
answer += 1
if inx == location:
break
return answer
※ 참고
from collections import deque
def solution(priorities, location):
answer = 0
q = deque()
for i in range(len(priorities)):
q.append((priorities[i], i))
while True:
pri, inx = q.popleft()
if pri < max(item[0] for item in q): # Queue의 길이가 1일 때, max 에러 발생
q.append((pri, inx))
else:
answer += 1
if inx == location:
break
return answer
만약, 위의 코드처럼 Queue에서 pop을 하고 난 뒤 우선순위의 최대값을 구하게 된다면
priorities의 최소 길이가 1이기 때문에 max 함수를 통해 최대값을 구하는 과정에서
빈 리스트를 찾게 되므로 에러가 날 수 있기 때문에 주의해야 한다.
'알고리즘 문제 > 프로그래머스_Lv2 도장깨기' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 (Python) (0) | 2024.05.10 |
---|---|
[프로그래머스] 더 맵게 (Python) (1) | 2024.05.09 |
[프로그래머스] 주식가격 (Python) (0) | 2024.03.27 |
[프로그래머스] 다리를 지나는 트럭 (Python) (0) | 2024.03.21 |
[프로그래머스] 전화번호 목록 (Python) (0) | 2024.03.18 |