[Python] 프로그래머스 Level 2 프로세스

지애·2024년 6월 28일
1

코딩테스트

목록 보기
12/12

point
queue, max

생각의 흐름

  • priorities 만으로는 process의 위치를 파악하기 어려워서 process라는 list를 하나 더 만들었다. (list의 요소들이 곧 process의 위치)
  • 현재 max_priority 보다 process의 priority가 작을 경우 dequeue & enqueue를 진행했고, 같을 경우 dequeue를 진행하는 방식으로 실행순서를 계산했다.
  • 중간에 list 길이 바뀌는 걸 고려하지 않아서 자꾸 index 에러가 났었다. -> priorities를 remove하는 대신 해당 값을 0으로 바꾸는 것으로 해결!

풀이

def solution(priorities, location):
    process = [i for i in range(len(priorities))]
    answer = 0
    max_priority = max(priorities)
    
    while process:
        i = process.pop(0)
        
        if priorities[i] < max_priority:
            process.append(i)

        else:
            answer += 1
            if i == location:
                break
            else:
                priorities[i] = 0
                max_priority = max(priorities)

    return answer

다른 풀이 보고 배운 점

  • process라는 새로운 list 대신 priorities와 location을 묶은 list를 만들면 remove를 하더라도 index 에러가 날 이유가 없다!
  • python queue 모듈을 사용하는 방법을 자꾸 까먹어서 list로 사용하게 되는데, queue 를 사용하면 속도가 훨씬 빨라지니 기억해두자
from collections deque

queue = deque([4, 5, 6])
queue.append(7)
queue.popleft()
profile
차근차근

0개의 댓글