코딩코딩

[프로그래머스] level2 - 프린터 : 파이썬(Python) 풀이

Jerry Jun 2020. 9. 16. 13:00
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를 사용하였다.

프린터라는 문제는 priorities 라는 우선순위가 적혀있는 배열을 받고 location 으로 배열의 위치를 받아 몇 번째로 출력하는지 맞추는 문제이다.

 

나는 기본 배열이 있는 priorities 와 location 으로 지정받은 위치를 가지는 priorities1 을 선언했다.

만약 location 이 2 이고 priorities = [1,3,5,2,1] 이라면 priorities1 = [0, 0, 1, 0, 0] 가 된다.

그러면 location으로 선언받은 위치를 계속 알 수 있기 때문에 priorities와 함께 움직인다.

 

cnt 로 움직인 횟수를 삽입하며 반복문을 돌면서 priorities의 가장 앞에 있는 배열과 그 배열의 최대값을 비교한다.

가장 앞에 있는 배열이 나머지 배열의 최대값보다 크거나 같고 priorities1의 위치도 1이라면 원하는 위치이니 cnt를 증가시키고 반환한다.

 

인증샷

 

프로그래머스
프로그래머스

300x250