(스택/큐 - 4. 프린터 문제) 시간 초과 오류
Opened this issue · 4 comments
Jiwon-Hwang commented
(스택/큐 - 4. 프린터 문제) 시간 초과 오류
Jiwon-Hwang commented
아마 튜플(enumerate)을 이용하든, 배열 2개를 만들어서 풀든간에 결국 pop(0)을 2번씩 매번 해줘야 하니까 시간 복잡도 올라간듯..
pop(0)
: 맨 앞에꺼를 빼줌과 동시에, 뒤에 남아있는 요소들의 index를 다 앞으로 땡겨줘야 해서 오래 걸림...
ChoiJongman22 commented
아마 튜플(enumerate)을 이용하든, 배열 2개를 만들어서 풀든간에 결국 pop(0)을 2번씩 매번 해줘야 하니까 시간 복잡도 올라간듯..
pop(0)
: 맨 앞에꺼를 빼줌과 동시에, 뒤에 남아있는 요소들의 index를 다 앞으로 땡겨줘야 해서 오래 걸림...
ChoiJongman22 commented
찾아보니까
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의 의미가 좀 어렵네용 ㅎㅎ
튜플을 사용해서 리스트를 만드는 거 잘 배웠습니다~
Jiwon-Hwang commented
@jong-hun-choi 오오 감사합니다!👍