파이썬으로 부시자! Python with Coreenee

프로그래머스 - 스택/큐 - 프린터

문제

스크린샷 2020-04-15 오후 1 28 40

입력

스크린샷 2020-04-15 오후 1 28 56


나의 처음 코드

이 문제는 큐에 관련된 문제이다. 우선순위와 순서에 맞춰 인쇄를 해주는 것이다. 처음 문제를 접할 때는 어떠한 자료구조를 써서 문제를 해결해나가야 할지 고민을 해야한다. 우리는 ‘큐’를 쓸것이고, 지금 검사하는 우선순위 보다 큰 우선순위가 있는지 없는지 존재의 여부를 알아야할 것이다. 나는 여기서 check_arr를 써서 특정 우선순위를 가지고 있는 인쇄물들의 갯수를 저장하였다. 따라서 내가 검사하는 인쇄물이 제일 높은 우선순위라면, pop을 해주고 우선순위를 알면되는 것이다.

def solution(priorities, location):
    answer = 0
    check_arr = [0] * 10
    #우선순위 순서를 가지고 있는 list
    loc_key = [i for i in range(len(priorities))]
    #우선순위를 가지고 있는 list
    loc_val = [i for i in priorities]
    pop_idx = 1
    #우선순위를 가지고 있는 원소의 갯수 체크
    for i in priorities:
        check_arr[i] += 1
    while loc_val:
        items_key = loc_key.pop(0)
        items_val = loc_val.pop(0)
        #지금 검사하는 인쇄물의 우선순위가 제일 높을 떄
        if sum(check_arr[items_val + 1 :]) == 0:
            if items_key == location:
                return pop_idx
            check_arr[items_val] -= 1
            pop_idx += 1
        #지금 검사하는 인쇄물보다 큰 우선순위가 있을 때
        else:
            loc_key.append(items_key)
            loc_val.append(items_val)
    return pop_idx

직관적으로 큐와 스택을 쓰는 문제는 알고리즘을 어떠한 식으로 구성하는지 보다는, 자료 구조를 어떠한 식으로 구성하여 문제의 요건을 충족할 것인가를 생각하면 좋을 것 같다.