Coding test

[Programmers] 과일 장수

heedy 2022. 12. 11. 16:34
728x90

문제 설명


문제 풀이 과정

첫번째 풀이 : 시간 초과

def solution(k, m, score):
    answer = 0
    score = sorted(score, reverse = True)
    while len(score) >= m:
        score_min = min(score[:m])
        answer += (score_min * m)
        score = score[m:]
    return answer

두번째 풀이: 효율성은 조금 좋아졌지만 그래도 시간 초과

def solution(k, m, score):
    answer = 0
    score = sorted(score, reverse = True)
    while len(score) >= m:
        score_min = min(score[:m])
        answer += (score_min * m)
        del score[:m]
    return answer

while문의 효율이 좋지 않다. for문으로 변경해서 연산량과 슬라이싱 범위도 줄이기

세번째 풀이: 통과

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

다른 사람의 풀이

def solution(k, m, score):
    return sum(sorted(score)[len(score)%m::m])*m
  1. score를 오름차순으로 정렬
  2. score의 길이에서 상자에 담을 수 있는 숫자의 나머지 부터 상자에 담을 수 있는 개수까지의 합
  3. 갯수대로 곱하기

이게 어떤 원리로 돌아가는지는 모르겠다.. ^^..

- coding test url:

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

728x90