<문제설명>

프로그래머스 문제 설명

 

저는 파이썬의 deque를 사용하였습니다. 

deque(double-ended queue)는 양방향에서 제거하고 삽입할 수 있는 자료구조입니다. 

 

deque는 popleft()라는 메서드를 가지고 있어 list의 pop과는 반대로 데이터를 제거할 수 있습니다. 

(사실 pop(0) 해도 됨)

 

dq 에는 프린트될 문서들의 우선 순위를 가지고 있는 deque입니다.

idx_dq는 원래 문서들의 순서를 가지고 있는 deque입니다.

(초기에 0부터 ~ priorities의 길이-1 까지 세팅해줍니다.)

 

예시에 나와 있는 것을 예로 들면 

dq : 2 1 3 2 

idx_dq : 0 1 2 3

 

으로 세팅되게 됩니다. 

 

from collections import deque

def solution(priorities, location):
    dq = deque(priorities)
    idx = [i for i in range(len(priorities))]
    idx_dq = deque(idx)
    answer=1
    while(len(dq)>0):
        dqp = dq.popleft()
        ix = idx_dq.popleft()
        if len(dq)>0 and dqp < max(dq) :
            dq.append(dqp)
            idx_dq.append(ix)
        else:
            if ix == location:
                return answer
            answer+=1
            
    return answer

 

저는 간단하게 dq와 idx_dq 모두 popleft로 데이터를 꺼내고,

 

dq에서 꺼낸 우선순위가 나머지 dq에 있는 데이터 중 가장 큰 데이터 보다 작다면(우선순위에서 밀린다면), 다시 deque들에 추가하고

 

dq에서 꺼낸 우선순위가 나머지 dq에 있는 데이터 중 가장 큰 데이터 보다 크다면(우선순위에서 우위를 차지한다면), location과 비교하여 우리가 원하는 순서의 문서라면 바로 answer를 리턴하게 설계하였습니다.

 

 

 

주의)

가끔 우선순위가 같은 값이 있다는 사실을 잊고 코드를 짜시는 분들이 질문을 하시는 경우가 있음.

 

 

총평)

level2 치고는 평이한 문제.  max 대신 any를 써서 푼 분이 있던데 좋은 방법 같았다.

any() : 반복 가능한 자료형 내 element 중 하나라도 True인지 확인해주는 함수

+ Recent posts