문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42587
문제 풀이 과정
from collections import deque
def solution(priorities, location):
# 초기화
queue_list = deque(enumerate(priorities))
answer = []
while queue_list:
current = queue_list.popleft()
# 현재 프로세스보다 우선순위가 높은 프로세스가 있는지 확인
if any(current[1] < item[1] for item in queue_list):
queue_list.append(current) # 우선순위가 높은 프로세스가 있다면 다시 큐에 넣기
else:
answer.append(current) # 그렇지 않으면 프로세스 실행
# 실행된 순서에서 location에 해당하는 프로세스의 위치 찾기
for i, process in enumerate(answer):
if process[0] == location:
return i + 1 # 위치는 0-based 인덱스이므로 1을 더함
print(solution([2, 1, 3, 2], 2)) # 테스트용
문제에서 제공하는 실행과정을 따라가면서 풀면 간단했다. 다만 파이썬에서 사용하는 방식 중에 any, all에 대해서 이번 기회에 좀 더 알아볼 수 있었던게 좋았다. any와 max의 경우 둘 다 O(n)의 시간복잡도를 가지고 있지만, max는 priorities 리스트 전체를 순회한 후 값을 조회했지만, any는 조건에 해당하는 값이 있을 경우 순회를 중단하기 때문에 미세한 차이지만 더 시간호율적인 코드를 생성할 수 있었다. 또한 any와 all을 통해서 다른 알고리즘을 풀 때도 효율적인 풀이가 가능할 것으로 보여 좋았다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Python] 12909 - 올바른 괄호 (0) | 2024.07.05 |
---|---|
[프로그래머스][Python] 12906 - 같은 숫자는 싫어 (0) | 2024.07.03 |
[프로그래머스][Python] 크레인 인형뽑기 게임 (0) | 2024.04.11 |