rueki

프로그래머스 (LV2). 프린터 본문

프로그래머스 연습

프로그래머스 (LV2). 프린터

륵기 2022. 10. 6. 03:07
728x90
반응형

생각보다 시간 초과때문에 골머리를 많이 앓은 문제...

왜 인덱스랑 우선순위 요소랑 바꾸기만 했다고 시간 초과가 안뜨는지 궁금한 부분인데

의심되는건 뒤에서 비교할 때 각 요소의 0, 1 인덱스 접근때문인거 같기도 하고..

 

- Queue에서 뽑아낸 첫 위치의 원소의 우선순위가 Queue에 남아있는 것들의 최대 우선순위보다 낮으면 일단 뒤로 보낸다.

- 최대 우선순위의 원소를 만나게 되면 이것이 첫 프린터 순서이기때문에 + 1 을 해주고 Queue에서 아예 제거

- 찾고자 하는 위치랑도 일치하면 멈추면 되고 아니면 이미 우선순위는 다른 것들보다 앞이기 때문에 제거 

 

 

from collections import deque

def solution(priorities, location):
    # (우선순위, idx)
    q = deque([(p, i) for i, p in enumerate(priorities)])
    answer = 0
    
    while q:
        current_v = q.popleft()
        #맨 앞의 요소 우선순위가 가장 높은 우선순위보다 낮으면 뒤로 보냄
        #queue에 존재하는 것들중 가장 높은 우선순위와 현재 원소 우선순위 비교
        if q and current_v[0] < max(q)[0]:
            q.append(current_v)
        else:
            #우선순위가 가장 큰 경우, 뒤에 같은 우선순위가 있을 수 있음
            #해당 location이 아닌 경우에는 아예 제외시켜버림
            answer += 1
            if current_v[1] == location:
                break
        
    return answer
728x90
반응형
Comments