카테고리 없음

[프로그래머스] level2 프린터

Jerry Jun 2020. 8. 24. 23:08
728x90

문제

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린��

programmers.co.kr

코드

from collections import deque

def solution(priorities, location):
    cnt = 0
    priorities = deque(priorities)
    prioritie1 = deque([0]*len(priorities))
    prioritie1[location] = 1
    while(1):
        if(len(priorities) == 1):
            cnt += 1
            break
        else:
            num  = priorities.popleft()
            num1 = prioritie1.popleft()
            if(num >= max(priorities)):
                cnt += 1
                if(num1 == 1):
                    break
            else:
                priorities.append(num)
                prioritie1.append(num1)
    return cnt

 

코드풀이

"스택/큐" 분야의 문제였다.

배열의 첫 번째 숫자를 뽑고 그 숫자의 우선도가 가장 크거나 같다면 출력하고 아니면

다시 배열 뒤로 붙여야 한다.

 

나는 deque 를 사용하여 popleft() 를 사용했다. 물론 그냥 pop(0) 을 사용해도 되지만 왠지 모르게 그렇게 했다.

여기서 주의할 점은 두 가지 였다.

(1) 반복문을 돌릴 때 길이를 배열의 길이로 두면 안된다는 점.

(2) 마지막 배열의 길이가 1이 될 수 있다는 점.

 

이 두가지만 고치고 간다면 수월하게 해결할 수 있다.

 

나는 주어진 숫자를 num에 넣었고, num1은 내가 원하는 출력물인지 알기 위해 만들었다.

그래서 num1 == 1 이라면 내가 원하는 출력물 이므로 break!

 

300x250