문제 설명 및 제한사항
아이디어 및 해결 방법
코드
from queue import PriorityQueue
def solution(n, k, enemy):
    # cumsum: n번째 라운드까지의 누적합
    cumsum, c = [], 0
    for x in enemy:
        c += x
        cumsum.append(c)
        
    # ksum: n번째 라운드까지 따졌을 때 가장 큰 k개의 합
    ksum, c = [], 0
    q = PriorityQueue() # min-heap
    for x in enemy:
        if q.qsize() < k:
            q.put(x)
            c += x
            ksum.append(c)
        else:
            if q.queue[0] < x: # 지금의 enemy 수가 더 많음
                c = c - q.get() + x
                q.put(x)
            ksum.append(c)
    
    remain = [n - (a-b) for a, b in zip(cumsum, ksum)]
    answer = 0
    while answer < len(enemy) and remain[answer] >= 0:
        answer += 1
        
    return answer
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges