최대 1 분 소요

https://school.programmers.co.kr/learn/courses/30/lessons/135808

.

내 풀이(오답)

def solution(k, m, scores):
    answer = 0
    scores = sorted(scores, reverse = True)
    
    # 최대 점수를 넘어가는 값들 제거
    while (scores[0] != k) :
        scores.pop(0)
        
    box_num = len(scores) // m 
    
    # m개씩 상자의 개수만큼 슬라이싱해서 점수를 더해간다.
    for _ in range(box_num) :
        # 상자에 m개 담음
        box = scores[0 : m] 
        answer += (min(box) * m) 
        for _ in range(m) :
            # 담았던 m개 삭제
            scores.pop(0) 

    return answer

예제 문제에서는 통과했지만 채점결과 특정 테스트 케이스에서 시간초과가 났다. 아마도 시간복잡도가 O(N^2)라서 그런듯하다.

새로운 풀이

def solution(k, m, scores):
    answer = 0
    scores = sorted(scores, reverse = True)
    
    
    for i in range(0, len(scores), m) :
        box = scores[i : i + m]
        if len(box) == m :
            answer += min(box) * m

    return answer

댓글남기기