CS 지식/Algorithm-Problem Solving 정리

[프로그래머스] 프린터

Hoplin 2022. 1. 24. 15:49
반응형

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

문제를 정리해 보자

 

  1. 인쇄 대기목록의 가장 앞에있는 문서를 대기목록에 꺼낸다(i라고 가정하겠다)
  2. 나머지 인쇄 대기목록에서 i보다 중요도가 높은 문서를 하나라도 존재하면, i를 대기목록 마지막으로 넣는다
  3. 없는경우에는 i를 인쇄한다.

예를 들어 문제에 제시된 4개의 문서 ABCD 대해 중요도가 [2,1,3,2]라고 한다면 아래와 같은 순서로 출력이된다

 

1) 2 1 3 2 / A B C D

2) 1 3 2 2 / B C D A

3) 3 2 2 1 / C D A B

4) 2 2 1 / D A B

5) 2 1  / A B

6) 1 / B

7) 끝

 

풀이 방식은 두개의 큐를 가지고 풀었다. 하나는 주어진 우선순위가 담긴 큐를, 하나는 location검사를 위해서 각 우선순위에 대한 index가 담긴 배열을 선언하였다. 풀이는 아래와 같다.

 

from collections import deque
from typing import Any, MutableSequence

def solution(priorities : MutableSequence, location : int):
    # i : location, j : value
    values = deque(priorities)
    indexes = deque([i for i in range(len(priorities))])
    loop = True
    print_priority = 0
    while loop:
        max_value = max(values)
        i,j = indexes[0],values[0]
        if j == max_value:
            if i == location:
                print_priority += 1
                return  print_priority
            else:
                print_priority += 1
                indexes.popleft()
                values.popleft()
        else:
            indexes.append(indexes.popleft())
            values.append(values.popleft())

이 문제와 동일한 유형의 문제가 백준에도 있다.

https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에

www.acmicpc.net

 

반응형