프로그래밍/Algorithm

프로그래머스 프린터 파이썬

모지사바하 2021. 11. 25. 21:30

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

 

문제만 봐도 우선순위에 따라 인쇄할 종이를 앞에서 맨뒤로 보내야할 일이 많을것 같았으므로 일단 deque 를 사용했다.

 

나의 경우, 순서를 기록하고 있는 배열을 추가로 만들어서 우선순위 배열의 값이 조정될때 (맨뒤로 보내거나 프린트될때)

순서배열 역시 동일하게 기록을 해줬고, 프린트해야하는 시점의 값이(순서가) location 과 동일하다면 기록해뒀던 answer 를 출력한다.

 

한번 풀어봤었던 문젠데 기억이 가물가물해서 다시한번 풀어봤다..

 

그리 어렵지 않게 잘 풀렸다.

 

 

from collections import deque


def solution(priorities, location):
    answer = 0
    d = deque(priorities)
    temp = deque([x for x in range(len(d))])
    while d:
        p = d.popleft()
        if d:
            if p < max(d):
                temp.append(temp.popleft())
                d.append(p)
            else:
                answer += 1
                if temp[0] == location:
                    return answer
                else:
                    temp.popleft()

    return answer + 1


print(solution([1, 2, 3, 4, 5], 0))
# [2, 1, 3, 2]	2	1
# [1, 1, 9, 1, 1, 1]	0	5

 

 

내가 푼 방식과 원리는 같은데 enumerate 를 사용하여 한결 깔끔한 풀이

from collections import deque


def solution(priorities, location):
    temp = deque([(v, i) for i, v in enumerate(priorities)])
    ans = 0

    while temp:
        val = temp.popleft()
        if temp and val[0] < max(temp)[0]:
            temp.append(val)
        else:
            ans += 1
            if val[1] == location:
                break
    return ans


print(solution([1, 7, 7, 3, 3, 6, 9, 4], 4))