DecordRay

[프로그래머스] Level2 : 프린터[Python] 본문

알고리즘/프로그래머스

[프로그래머스] Level2 : 프린터[Python]

DecordRay 2023. 1. 11. 02:04
728x90
반응형

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42587

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 :

1. 우선순위와 location에 해당하는 문서인지 판별 여부를 print_list(스택)에 저장

찾을 문서이면 1
찾을 문서가 아니면 0
을 print_list의 두번째 원소로 저장
2. print_list 첫번째 원소의 우선순위를 priority, 찾는 문서인지 여부를 loc 변수에 저장
3. 문서의 우선순위 비교
꺼낸 문서의 우선순위가 가장 높다면
-> 꺼낸 문서를 스택에서 삭제, 우선순위 리스트에서도 현재 우선순위 삭제
꺼낸 문서의 우선순위가 가장 높지 않다면
-> print_list(스택)의 맨 마지막에 추가 후 첫번째 원소 삭제, 우선순위도 동일하게 진행  
4. 꺼낸 문서가 찾는 문서라면 break
 

코드 :

from collections import deque
def solution(priorities, location):
    answer = 0
    print_list = deque()    
    for i in range(len(priorities)): # 1.우선순위와 location에 해당하는 문서인지 판별 여부를 print_list(스택)에 저장
        if i == location:
            print_list.append([priorities[i],1])    # 찾을 문서이면 1
        else:
            print_list.append([priorities[i],0])    # 찾을 문서가 아니면 0
    
    while print_list:   
        priority = print_list[0][0]         # 2.print_list 첫번째 원소의 우선순위와 찾는 문서인지 여부 저장
        loc = print_list[0][1]
        
        if priority == max(priorities):     # 3.꺼낸 문서의 우선순위가 가장 높다면 
            print_list.popleft()            # 꺼낸 문서를 스택에서 삭제
            priorities.remove(priorities[0])# 우선순위 리스트에서도 현재 우선순위 삭제
            answer += 1                     # answer + 1
            if loc == 1:                    # 4.꺼낸 문서가 찾는 문서라면 break
                break
        else:                               # 꺼낸 문서의 우선순위가 가장 높은 것이 아니라면
            print_list.append([priority,loc]) # 스택의 맨 위로 추가
            print_list.popleft()              # 스택 첫번째 원소 삭제
            priorities.append(priorities[0])  # 우선순위 리스트도 동일하게 진행
            priorities.remove(priorities[0])
    return answer

 

728x90
반응형
Comments