https://programmers.co.kr/learn/courses/30/lessons/42587
"""
1. 아이디어
2. 시간복잡도
"""
def solution(priorities, location):
index_priorities = list(range(len(priorities)))
# 인덱스를 저장하는 리스트를 따로 만든다.
order = 0 # 인쇄되는 순서
while priorities:
paper = priorities.pop(0)
index_paper = index_priorities.pop(0)
for x in priorities:
# 만약 인쇄대기목록에 나보다 우선순위가 높은 것이 있다면 다시 맨뒤로 넣는다.
if paper < x:
priorities.append(paper)
index_priorities.append(index_paper)
break
else: # 만약 인쇄대기목록에 나보다 우선순위가 높은 것이 없다면
order += 1 # 문서가 출력이 완료되었으므로 순서를 +1 해준다.
# 만약 출력된 문서가 내가 찾던 문서이면 순서를 반환한다. (인덱스로 비교)
if index_paper == location:
return order
백준에도 프린터 큐라는 문제 같이 똑같은 문제가 있는데 푸는 방법이 생각이 안났다. 인덱스를 따로 저장하는 리스트를 만든다는 생각만 했으면 큐를 활용해서 풀었을 것인데 그 점을 생각 못했다.
인덱스를 따로 저장하는 리스트를 만든 후 문서를 뽑아서 반복문을 돌리면서 인쇄 대기목록에 이미 뽑은 문서보다 우선순위가 높은 것이 있는지 확인한다. 이미 뽑은 문서보다 인쇄 대기목록에 우선순위가 높은 것이 있다면 뽑은 문서는 다시 맨뒤로 append한다.
만약 우선순위가 높은 것이 없다면 출력을 완료했다고 생각하고 order += 1 즉 순서를 +1 해준다. 이때 출력된 문서의 인덱스와 문제에서 제시한 locations 즉, 목표로 하는 문서의 인덱스와 일치한다면 순서를 반환하고 종료한다.
def solution(priorities, location):
printer = []
order = 0
for idx, value in enumerate(priorities):
printer.append((idx, value)) # location과 비교하기 위한 인덱스와 값을 따로 저장해준다.
while printer:
idx, value = printer.pop(0)
for x, y in printer:
if value < y: # 만약 대기열 내에 현재 인쇄 작업보다 우선순위가 높은게 있다면 다시 대기열에 넣어준다.
printer.append((idx, value))
break
else: # 대기열에 우선순위가 높은게 없다면 인쇄한다.
order += 1
if idx == location: # 인쇄한 것이 location과 같다면 순서를 return 해준다.
return order
X