Level 2. 프린터

Pear_Mh·2021년 6월 22일
0

Programmers-Level 2.

목록 보기
13/40

13. 프린터

코딩테스트 연습 > 스택/큐 > 프린터
https://programmers.co.kr/learn/courses/30/lessons/42587


문제 설명

  • Input value = priorities(list(int)), location(int)

  • Process

    1. 입력한 priorities의 첫번째 인덱스 원소 X 를 꺼낸다.

    2. 리스트의 나머지 값들이 X보다 큰 경우가 하나라도 존재하면

      • 원소 X 를 입력한 리스트의 끝에 추가한다.
    3. 그렇지 않을 경우 X 를 결과 리스트에 추가한다.

    4. 입력된 location가 결과 리스트의 몇번째에 위치하는지 return 한다.

  • Output value = return(int)


제한 사항

  • 현재 대기목록에는 1개 이상 100개 이하의 문서가 있습니다.

  • 인쇄 작업의 중요도는 1~9로 표현하며 숫자가 클수록 중요하다는 뜻입니다.

  • location은 0 이상 (현재 대기목록에 있는 작업 수 - 1) 이하의 값을 가지며 대기목록의 가장 앞에 있으면 0, 두 번째에 있으면 1로 표현합니다.


문제 구상

  1. 리스트의 첫번째 값을 pop()해야 하므로 deque를 이용하고, 각 값의 위치값을 명시하기 위해 enumerate() 사용
#01
from collections import deque
result = 0
p_que = deque()
for i,v in enumerate(priorities):
p_que.append((v,i))    

02-1. break선언을 하기 전 까지 while 문을 이용

02-2. 문제에서 제시한 프로세스에 맞추어 J 추출 후 남은 값과의 비교

02-3. 비교 결과에 따라 리스트에 추가 or result+=1을 한다.

02-4. result+=1 할 때, location값이 J의 1번째 값(우선순위값)과 같을 경우 해당 반복문을 종료한다.

while True:
    J = p_que.popleft()
    if p_que and max(p_que)[0] > J[0]:
        p_que.append(J)
    else:
        result += 1
        if J[1] == location:
            break
result

문제 풀이

from collections import deque
def solution(priorities,location):
    result = 0
    p_que = deque()
    for i,v in enumerate(priorities):
        p_que.append((v,i))    
    while True:
        J = p_que.popleft()
        if p_que and max(p_que)[0] > J[0]:
            p_que.append(J)
        else:
            result += 1
            if J[1] == location:
                break
    return result

# Code test
priorities, location = [2, 1, 3, 2], 2
solution(priorities,location)
profile
Beyond the new era.

0개의 댓글

관련 채용 정보