Jiwon-Hwang/Programmers

(스택/큐 - 4. 프린터 문제) 시간 초과 오류

Opened this issue · 4 comments

(스택/큐 - 4. 프린터 문제) 시간 초과 오류

아마 튜플(enumerate)을 이용하든, 배열 2개를 만들어서 풀든간에 결국 pop(0)을 2번씩 매번 해줘야 하니까 시간 복잡도 올라간듯..

pop(0) : 맨 앞에꺼를 빼줌과 동시에, 뒤에 남아있는 요소들의 index를 다 앞으로 땡겨줘야 해서 오래 걸림...

아마 튜플(enumerate)을 이용하든, 배열 2개를 만들어서 풀든간에 결국 pop(0)을 2번씩 매번 해줘야 하니까 시간 복잡도 올라간듯..

pop(0) : 맨 앞에꺼를 빼줌과 동시에, 뒤에 남아있는 요소들의 index를 다 앞으로 땡겨줘야 해서 오래 걸림...

찾아보니까

def solution(priorities, location):
pi_list = [(p, i) for i, p in enumerate(priorities)]  #인쇄 목록과 인덱스 번호를 가진 리스트
waiting_q = []  #최종 출력될 인쇄물들을 순서대로 집어넣을 큐

while pi_list:
    pi = pi_list.pop(0)
    priority = pi[0]  #첫 번째 프린터의 우선순위 priority
    p_list = [priority for priority, idx in pi_list]  #pi_list에서 priority만 뽑아와서 list를 만든다.
    if p_list:
        max_p = max(p_list)

    if priority >= max_p:
        waiting_q.append(pi)
    else:
        pi_list.append(pi)

for i, item in enumerate(waiting_q): #최종 완성된 waiting_q에서 location과 일치하는 index를 가진 아이템을 찾는다.
    if item[1] == location:
        return i + 1

print(solution([1,2,3,2],2))

이렇게 하면 되는 것 같아요. 한번 해보시면 좋을 것 같아요. priority for priority의 의미가 좀 어렵네용 ㅎㅎ
튜플을 사용해서 리스트를 만드는 거 잘 배웠습니다~

@jong-hun-choi 오오 감사합니다!👍