자료구조, 알고리즘 문제 풀어보기(프린터 작업 스케줄링)
16 Jul 2025 | Data Structure개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.
문제 4: 프린터 작업 스케줄링
목표
프린터 작업들이 우선순위를 가지고 있을 때, 특정 작업이 언제 인쇄될지 구하세요.
def printer_queue(priorities, location):
"""
priorities: 각 작업의 우선순위 리스트
location: 확인하고 싶은 작업의 인덱스
반환: 해당 작업이 몇 번째로 인쇄되는지 (1부터 시작)
"""
# 여기에 코드를 작성하세요
pass
# 테스트
print(printer_queue([2, 1, 3, 2], 2)) # 3번째 작업(우선순위 3)이 언제 인쇄되는지
print(printer_queue([1, 1, 9, 1, 1, 1], 0)) # 첫 번째 작업이 언제 인쇄되는지
def printer_queue(priorities, location):
# (우선순위, 원래_인덱스) 형태로 큐 생성
queue = [(p, i) for i, p in enumerate(priorities)]
# 인쇄된 작업 수
count = 0
# 큐가 빌 때까지 반복
while queue:
# 현재 작업 가져오기
current = queue.pop(0)
# 현재 작업보다 우선순위가 높은 작업이 있는지 확인
if any(current[0] < q[0] for q in queue):
# 우선순위가 높은 작업이 있으면 현재 작업을 큐의 맨 뒤로 이동
queue.append(current)
else:
# 우선순위가 가장 높으면 인쇄하고 카운트 증가
count += 1
# 현재 작업이 우리가 찾던 작업인지 확인
if current[1] == location:
return count
# 이 부분은 실행되지 않아야 함 (큐에서 해당 작업을 반드시 찾아야 함)
return -1
# 테스트
print(printer_queue([2, 1, 3, 2], 2)) # 1
print(printer_queue([1, 1, 9, 1, 1, 1], 0)) # 5