https://school.programmers.co.kr/learn/courses/30/lessons/42587
현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location이 매개변수로 주어질 때, 해당 프로세스가 몇 번째로 실행되는지 return 하도록 solution 함수를 작성하는 문제이다.
문제 분류가 스택/큐이다.
파이썬에서 스택은 list, 큐는 deque이다.
큐로 접근해보자.
1. 현재 인덱스들과 우선순위를 한번에 묶을 수 있는 키워드인 enumerate를 사용한 deque를 선언.
arr = deque(enumerate(priorities))
2. 계속 popleft를 시키면서 popleft를 시킨 프로세스의 index와 우선순위를 가져와서 any키워드를 사용해 비교한다.
(코틀린에서 유용하게 사용하는 any, 파이썬에도 있었는지 몰랐다.)
any를 사용해서 popleft시킨 프로세스의 우선순위보다 큰 경우가 있으면 다시 append()
큰 경우가 없다면 answer을 1증가하고, 처음에 입력받은 location과 popleft()한 index가 같으면 반복문 종료
while arr:
index, priority = arr.popleft()
if any(priority < p for _, p in arr):
arr.append((index, priority))
else:
answer += 1
if index == location:
break
any 키워드의 사용법을 다시보자.
if any(priority < p for _, p in arr):
arr.append((index, priority))
else:
answer += 1
arr은 (인덱스, 우선순위)로 이루어진 deque이다.
문제에서는 우선순위로 답이 정해지기 때문에 any키워드 안 인덱스를 언더바(_)처리를 했다.
그리고 arr안에 popleft() 한 프로세스의 우선순위보다 큰게 있다면 if문을 수행하고,
우선순위보다 큰게 없다면, else 문을 처리한다.
any라는 키워드를 배우게 되었다.
[LeetCode][Python] 380. Insert Delete GetRandom O(1) (0) | 2024.01.17 |
---|---|
[LeetCode][Python] 2225. Find Players With Zero or One Losses (0) | 2024.01.15 |
[LeetCode][Python] 1235. Maximum Profit in Job Scheduling (0) | 2024.01.06 |
[Programmers][Python] 캐시 (0) | 2024.01.05 |
[LeetCode][Python]300. Longest Increasing Subsequence (1) | 2024.01.05 |
댓글 영역