1. 구해야 하는 것
각각의 상자 가격들의 합이 최대일때의 이익
2. 1을 구하기 위해 필요한 것
최대가 되려면? 최저가의 사과들끼리, 품질 좋은 사과끼리 분리해야함
sort로 정렬 후 m개 씩 끊어서 담기
개수가 모자라면 세지 않음
내림차순으로 정렬 후 0부터 사과개수 -1까지 m개의 step으로 for문 돌리기
i:i+m개씩 슬라이싱했을 때, len(a)가 m개, 즉 한 상자를 모두 채운다면, result에 해당 상자 가격을 더해준다
def solution(k, m, score):
result = 0
score.sort(reverse=True)
for i in range(0, len(score), m):
a = score[i:i+m]
if len(a) == m:
result += min(a)*m
return result
다른 풀이
오름차순 정렬 후 (총 사과개수를 상자당 사과개수 로 나눈 나머지) 부터 시작해서 m개씩 자른다
def solution(k, m, score):
return sum(sorted(score)[len(score) % m::m])*m
# 코드 뽀개기
a = len(score) % m # (사과 개수)를 (한 상자당 사과 개수)로 나눈 나머지 = 버려야 할 부분!!
b = sorted(score) # 사과를 품질별 오름차순 정렬
c = b[a::m] # 사과를 품질별 오름차순 정렬한 리스트를 필요없는 부분 제끼고 m개씩 나누기
# 오름차순 정렬이므로 m개씩 나누면 첫번째 원소가 최솟값이 된다.
d = sum(c) # sum으로 상자별 최소 사과가격을 모두 더함
return d*m # 상자개수를 곱해서 총 수익 구하기
오름차순 정렬한 score와 m개씩 슬라이싱한 리스트
'코딩 테스트 연습' 카테고리의 다른 글
[알고리즘] 프로그래머스 - 행렬의 곱셈 (0) | 2023.06.01 |
---|---|
[알고리즘] 프로그래머스 - 대충 만든 자판 (0) | 2023.06.01 |
[알고리즘] 프로그래머스 - 푸드 파이트 대회 (0) | 2023.05.19 |
[알고리즘] 프로그래머스 - 소수 찾기 (0) | 2023.05.18 |
[알고리즘] 프로그래머스 - 카펫 (0) | 2023.05.09 |
댓글