프로그래머스 - 디스크 컨트롤러

Computer Science/Problem Solving

문제 설명

제한사항 및 입출력

풀이

문제 설명에서 볼 수 있듯이 각 작업에 우선순위가 주어지고 이 우선순위(소요시간, 요청 시각)를 기반으로 작업을 처리해야한다. 작업 큐에서 매번 가장 작은 우선순위를 순회하며 찾을 순 없으니 힙(heap)을 사용하여 가장 작은 우선순위를 빠르게 찾을 수 있도록 해주었다. 또한 소요시간과 요청 시각이 같다면 작업의 번호가 작은 것을 우선순위로 본다고 했는데, 사실 소요시간과 요청 시각이 같다면 무엇을 먼저 처리하든 구하려는 정답에는 차이가 없기 때문에 제외하고 2가지만 고려해주었다.

내 코드

from heapq import heappush, heappop
from collections import deque

def solution(jobs):
    # 요청 시각 기준으로 정렬
    jobs.sort()
    jobs = deque(jobs)

    time = 0        # 현재 시각
    heap = []       # 대기 큐
    total_time = 0  # 전제 작업의 소요 시간
    job_length = len(jobs)
    idx = 0
    while idx < job_length:
        # 현재 시각까지 도착한 작업들을 힙에 넣기
        while jobs and jobs[0][0] <= time:
            request, duration = jobs.popleft()
            heappush(heap, (duration, request))

        # 대기 큐가 있다면
        if heap:
            duration, request = heappop(heap)
            time += duration
            total_time += time - request
            # 실제로 작업이 처리될 때만 증가
            idx += 1
        else:
            # 대기 큐가 비어있으면 다음 작업의 요청 시각으로 이동
            if jobs:
                time = jobs[0][0]

    return total_time // job_length

주어진 작업 큐에서 현재 시간보다 작은 시간의 작업들을 모두 힙에 넣고 힙이 비어있지 않다면 하나씩 꺼내서 작업을 처리해주었다.

 

시간 복잡도: O(n logN)

-> 힙 연산이 log n이고 총 n번 반복

'Computer Science > Problem Solving' 카테고리의 다른 글

프로그래머스 - [1차] 캐시 (2018 KAKAO BLIND)  (0) 2025.11.19
프로그래머스 - 거리두기 확인하기  (0) 2025.11.18
프로그래머스 - 조이스틱  (0) 2025.11.17
프로그래머스 - 메뉴 리뉴얼  (0) 2025.11.16
프로그래머스 - 서버 증설 횟수  (0) 2025.11.15
'Computer Science/Problem Solving' 카테고리의 다른 글
  • 프로그래머스 - [1차] 캐시 (2018 KAKAO BLIND)
  • 프로그래머스 - 거리두기 확인하기
  • 프로그래머스 - 조이스틱
  • 프로그래머스 - 메뉴 리뉴얼
hojoo
hojoo
그냥 개발이 즐거운 사람
  • hojoo
    dev_record
    hojoo
  • 전체
    오늘
    어제
    • 분류 전체보기 (84)
      • Study (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (0)
        • Real MySQL 8.0 (0)
        • 친절한 SQL 튜닝 (0)
        • 도메인 주도 개발 시작하기 (0)
        • 대규모 시스템 설계 기초 (0)
      • Computer Science (68)
        • Problem Solving (30)
        • Data Structure (4)
        • Spring Boot (14)
        • DB (1)
        • Java (4)
        • OS (3)
        • Server (3)
        • Tech (0)
      • Security (16)
        • Reversing (15)
        • Assembly (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자료구조
    bean
    12033
    백준
    PE header
    레나 튜토리얼
    dreamhack.io
    Header
    servlet
    리버싱
    13265
    DP
    x64dbg
    리버싱 핵심원리
    Lena tutorial
    n^2 배열 자르기
    DB
    HTTP
    9421
    2539
    프로그래머스
    15973
    Spring boot
    Reversing
    n+1
    16946
    19622
    21278
    소수상근수
    서버 증설 횟수
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
hojoo
프로그래머스 - 디스크 컨트롤러
상단으로

티스토리툴바