본문 바로가기

알고리즘/프로그래머스

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

순서도가 높은 인쇄 문서부터 인쇄하면 된다.

요청한 문서가 몇 번째로 인쇄되는지 구하는 문제이다.

 

 

# A, B, C, D
# 2  1  3  2

import collections


def solution(priorities, location):
    priorities_cnt = dict((collections.Counter(priorities).items()))
    priorities_idx = [(num, idx) for idx, num in enumerate(priorities)]
    location = (priorities[location], location)

    answer = 0

    while priorities_idx:
        check = priorities_idx[0][0]

        if check == max(priorities_cnt):  # 순서도가 가장 높은 인쇄물?
            answer += 1

            if priorities_idx[0] == location:  # 요청한 인쇄물?
                return answer

            # 인쇄
            priorities_idx.pop(0)

            priorities_cnt[check] -= 1
            if priorities_cnt[check] == 0:
                del priorities_cnt[check]
            continue

        else:  # 순서도가 가장 높지 않다.
            tmp = priorities_idx.pop(0)
            priorities_idx.append(tmp)


print(solution([1, 1, 9, 1, 1, 1], 0))

 

 

먼저, 중요도마다 개수를 셌다.

출력을 위해 (인쇄물, index)로 이루어진 리스트를 만들었다.

 

리스트에서 요소를 하나씩 꺼내며 확인하는 것은 '가장 높은 중요도인가?'이다.

맞는다면 그 인쇄물은 출력한다.

아니라면, 그 인쇄물은 맨 뒤로 보낸다.