자료구조, 알고리즘 문제 풀어보기(프린터 작업 스케줄링)

|

개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있습니다.


문제 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