[백준 23843] 콘센트

Junyoung Park·2022년 2월 28일
0

코딩테스트

목록 보기
127/631
post-thumbnail

1. 문제 설명

콘센트

2. 문제 분석

최대 힙과 최소 힙을 활용해 시간이 가장 많이 걸리는 기기부터 콘센트 크기가 허용하는 만큼 충전하자. 각 콘센트 자리에는 그 자리에서 기기별 충전시간이 누적 카운트된다. 다 충전한 기기를 뽑을 때에는 그 자리에서 사용한 시간이 가장 작은 자리를 사용하자.

  • 주어진 크기에 따라 우선순위 큐를 활용하는 문제

3. 나의 풀이

import heapq
import sys

n, m = map(int, sys.stdin.readline().rstrip().split())
heap = []
for device in map(int, sys.stdin.readline().rstrip().split()):
    heapq.heappush(heap, -1 * device)
time = 0
outlet = []
# outlet의 사이즈는 최대 m으로 고정한다. 이때 값은 충전 시간이 긴 기기부터 넣으면서 해당 자리에서 사용한 시간이 카운트된다.
while heap:
    device = heapq.heappop(heap) * -1

    if len(outlet) < m: heapq.heappush(outlet, device) # 콘센트에 충전할 수 있다면 충전하자.
    else:
        # 콘센트 자리가 없다면
        local_min = heapq.heappop(outlet)
        heapq.heappush(outlet, local_min + device)

print(max(outlet))
profile
JUST DO IT

0개의 댓글