문제
문제 이해
- 운영체제가 다음 규칙을 따라 프로세스를 관리할 경우 특정 프로세스는 몇 번째로 실행되는가?
- 실행 대기 큐에서 대기중인 프로세스 하나 꺼냄
- 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있으면 다시 큐에 넣음
- 만약 그런 프로세스가 없다면 해당 프로세스 실행하고, 큐에 넣지 않음
- 프로세스의 중요도 배열 priorities, 프로세스의 위치 location
풀이
프로세스 실행 과정대로 진행하면서 해당 location에 존재하는 프로세스가 몇 번째로 실행되는지 구함
- 무한 반복을 통해 location에 있는 프로세스가 실행될 때까지 반복
- priorities에서 맨 앞에 있는 걸 pop
- 우선순위가 더 큰게 존재하면 다시 큐에 append, 없으면 해당 프로세스는 실행되며 cnt += 1
- 실행된 프로세스가 location에 위치한 프로세스라면 cnt 반환
- 해당 location의 프로세스가 다시 append 되는 경우 i와 location 갱신
코드
우선 순위가 차례로 존재(ex. [6, 5, 4, 3, 2, 1])하는 경우와 처음 priorities의 길이가 1일 경우 모두 pop이 되고 빈 배열의 max를 구할 수 없어 런타임 에러가 발생한다. 따라서 while문 처음에 길이가 1일 경우 반환할 수 있도록 if문을 추가하였다. 추가로 location과 i를 갱신하는 과정에서 while문의 맨 아래에서 i += 1을 해주기 때문에 -1로, 다시 append를 하여 맨 뒤에 위치하므로 location은 len(priorities) - 1로 갱신해주었다.
def solution(priorities, location):
cnt, i = 0, 0
while True:
if len(priorities) == 1:
return cnt + 1
p = priorities.pop(0)
if p < max(priorities):
priorities.append(p)
if location == i:
i, location = -1, len(priorities) - 1
else:
cnt += 1
if location == i:
return cnt
i += 1
'알고리즘 연습 > 프로그래머스' 카테고리의 다른 글
[Python - Lv.2] 행렬의 곱셈 (0) | 2024.03.23 |
---|---|
[Python - Lv.2] 전화번호 목록 (0) | 2024.03.21 |
[Python - Lv.2] 의상 (0) | 2024.03.19 |
[Python - Lv.2] 기능개발 (3) | 2024.03.18 |
[Python - Lv.2] n^2 배열 자르기 (0) | 2024.03.17 |