인쇄 대기 목록에 있는 n개의 문서에는 각각의 중요도가 있는데, 해당 문서들은 목록 순서에 맞춰 순차적으로 인쇄되는 것이 아닌 중요도 기준으로 인쇄 순서가 정해진다. 이때, 내가 요청한 문서는 몇번째로 인쇄되는 지 알아보자.
선형 큐 처럼 원하는 값이 나올 때까지 값의 위치를 오른쪽에서 왼쪽으로, 왼쪽에서 오른쪽으로 계속 이동하다가
원하는 값이 나올 때 leftpop()를 진행하므로서 큐에 값이 없을 때까지 반복하자.
몇 번째인지 순서를 할당할 수 있는 변수 선언
count = 0
큐 안의 값이 없을 때까지 while문을 통해 반복
while (priorities):
아래와 같이 크게 두가지 경우로 진행된다.
- case 1: 출력해야하는 값이 맨 앞 (0번째)에 있을 시
if location == 0: # case 1_1 : 맨 앞에 있는 값보다 우선 순위가 높은 값이 있을 시 if priorities[0] < max(priorities): # case 1_2 : 더 이상의 우선순위 숫자가 없고 요청한 숫자가 0번째에 위치했을 시 else:
- case 2: 출력해야하는 값이 맨 앞이 아닌 다른 위치에 있을 시
else: # case 2_1 :우선 순위 값이 0번째 위치에는 없지만 존재할 때 if priorities[0] < max(priorities): # case 2_1 : 우선 순위 값이 0번째에 존재 시 else:
전체 코드
def solution(priorities, location): count = 0 while (priorities): # for priority in priorities: if location == 0: # 출력해야하는 값이 맨 앞 (0번째)에 있을 시 if priorities[0] < max(priorities): # 우선 순위가 높은 숫자가 있는지 확인하고 priorities.append(priorities.pop(0)) # 더 높은 숫자가 있을 시 마지막으로 보낸다. location = len(priorities) - 1 # 위치값은 0번째에서 마지막으로 바꿔준다. else: # 더 이상의 우선순위 숫자가 없고 요청한 숫자가 0번째에 위치했다면 요청한 숫자를 뽑을 차례이므로 while문을 종료하고 count 변수를 반환한다. return count + 1 else: if priorities[0] < max(priorities): # 우선 순위 값이 0번째 위치에는 없지만 존재할 때 priorities.append(priorities.pop(0)) # 0번째 배열은 뒤로 보내주고 else: priorities.pop(0) # 우선 순위 값이 0번째에 존재 시 큐에서 제거 count += 1 location -= 1 # 출력해야하는 값은 앞으로 밀려났으니 위치값에 -1를 해준다. return count