728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42587
코드
from collections import deque
def solution(priorities, location):
queue = deque([(i,p) for i,p in enumerate(priorities)])
order = 0
while queue:
cur_process = queue.popleft()
if any(cur_process[1]<p[1] for p in queue):
queue.append(cur_process)
else:
order += 1
if cur_process[0] == location:
return order
다른 사람 코드
def solution(p, l):
ans = 0
m = max(p)
while True:
v = p.pop(0)
if m == v:
ans += 1
if l == 0:
break
else:
l -= 1
m = max(p)
else:
p.append(v)
if l == 0:
l = len(p)-1
else:
l -= 1
return ans
접근법
이 문제는 큐 자료구조를 사용하여 프로세스를 처리하는 시뮬레이션 문제입니다. 큐를 활용하여 프로세스를 처리하면서 주어진 규칙에 따라 진행하면 되며 enumrate를 사용해서 location의 위치를 index로 체크하는 게 관건입니다.
주어진 priorities 리스트를 큐로 만듭니다.
큐에서 하나의 프로세스를 꺼내고, 우선순위가 더 높은 프로세스가 있는지 확인합니다.
높은 우선순위가 있다면 다시 큐에 넣고, 아니라면 해당 프로세스를 처리하고 순서를 증가시킵니다.
처리한 프로세스가 목표로 주어진 위치인지 확인하고, 맞다면 현재까지 처리한 순서를 반환합니다.
배운 점
any를 사용하는 방법에 대해 배웠습니다
all 함수의 반대로 받은 요소 중 하나라도 True면 True를 돌려주고, 모두 False일 경우에만 False를 return 한다
all 함수는 모든 요소가 True이면 True, 하나라도 False이면 False를 리턴한다.
'자료구조&알고리즘 > 프로그래머스' 카테고리의 다른 글
[Python] 디스크 컨트롤러 / 힙 (1) | 2024.02.10 |
---|---|
[Python] 더 맵게 - 힙 (1) | 2024.02.10 |
[Python] 올바른 괄호 - 스택/큐 (0) | 2024.02.06 |
[Python] 기능개발 - 스택/큐 (1) | 2024.02.06 |
[Python] 해시 - 폰켓몬 (0) | 2024.02.05 |