-
[프로그래머스] 디스크 컨트롤러 - python코딩테스트 2024. 12. 31. 01:59
https://school.programmers.co.kr/learn/courses/30/lessons/42627
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr

풀이
1. 주어진 리스트를 heap으로 변환하여 요청시간을 기준으로 sort 된 heap을 만든다
2. 완료된 작업의 수를 0으로 초기화하고 완료된 작업의 수가 주어진 리스트의 원소의 개수보다 작을 때 아래 작업을 진행한다.
3. 힙에 원소가 있고 힙의 맨 앞 원소의 요청시간과 현재 시간을 비교하며 현재시간보다 요청 시간이 작다면 pop한 후 새로운 힙(temp_heap이라 칭함)에 push한다
이때, 소요시간을 앞으로 push하여 소요시간을 기준으로 sort되게 한다.(ex.(소요시간,요청시간))
4. temp_heap에 원소가 있으면 (현재 시간을 기준으로 이전에 요청된 작업이 있다면) pop하고 현재시간에 소요시간을 더해준다
또한 반환시간(현재시간- 요청시간)을 계산하고, 완료된 작업에 +1을 더해준다.
5. temp_heap에 원소가 없으면 현재시간에 + 1을 더해준다.
6. '반환시간 // 주어진 리스트의 원소의 개수' 를 계산하여 작업의 평균 반환 시간을 return 한다.import heapq def solution(jobs): end_jobs = 0 #완료된 작업의 수 time = 0 #현재시간 req_time_sum = 0 #반환시간 cnt_jobs = len(jobs) temp_heap = [] heapq.heapify(jobs) #1 while end_jobs < cnt_jobs: #2 while jobs and jobs[0][0] <= time: #3 req_job, dur_job = heapq.heappop(jobs) heapq.heappush(temp_heap,(dur_job, req_job)) if temp_heap: #5 dur_job, req_job = heapq.heappop(temp_heap) time += dur_job req_time_sum += (time - req_job) end_jobs += 1 else: #5 time += 1 return req_time_sum // cnt_jobs #6'코딩테스트' 카테고리의 다른 글
[프로그래머스] 해시 - 베스트앨범 (python) (0) 2025.02.09 [프로그래머스] 입국심사 -python (0) 2025.01.08 [프로그래머스] 더 맵게 - python (0) 2024.12.31 [프로그래머스] N으로 표현 (0) 2024.12.31 [프로그래머스] 정수 삼각형- python (0) 2024.12.15