문제
https://school.programmers.co.kr/learn/courses/30/lessons/135808
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
"사과의 최대 점수 k, 한 상자에 들어가는 사과의 수 m, 사과들의 점수 score가 주어졌을 때, 과일 장수가 얻을 수 있는 최대 이익을 return 하는 solution 함수를 완성해 주세요"가 이 문제가 원하고 있는 답이다.
점수를 계산하는 식은 (상자의 최저 사과 점수) * (한 상자에 담긴 사과의 개수) * (상자의 개수) 이므로 최대로 점수를 뽑아내려고 한다면 내림차순으로 정렬한 후 상자를 묶어서 처리하는 방법을 통해 최대 점수를 얻을 수 있다.
예를 들어서 입력 값으로 k = 3, m = 4, [1, 2, 3, 1, 2, 3, 1] 이 들어오게 된다면 아래와 같이 처리할 수 있다.
# 입력값을 내림 차순으로 정렬함
[1, 2, 3, 1, 2, 3, 1] -> [3, 3, 2, 2, 1, 1, 1]
# 앞에서 부터 m 만큼 자르고 계산하기
[[3, 3, 2, 2], 1, 1, 1]
이를 Python 코드로 나타낸다면 다음과 같이 나타 낼 수 있다.
def solution(k, m, score):
# m: m개씩 담아 포장, k: 최고품질 점수
box_count = len(score) // m
count = 0
boxes = []
box = []
for i in sorted(score, key=lambda x: -x):
box.append(i)
if len(box) == m:
boxes.append(box)
box = []
print(boxes)
result = sum([m * min(i) for i in boxes])
return result
'Algorithm > Programmers' 카테고리의 다른 글
프로그래머스 LV1 신고 결과 받기 (0) | 2023.05.11 |
---|---|
프로그래머스 LV1 신규 아이디 추천 (0) | 2023.05.11 |
프로그래머스 LV1 옹알이2 (0) | 2023.05.05 |
프로그래머스 LV1 키패드 누르기 (0) | 2023.05.05 |
프로그래머스 LV1 체육복 (0) | 2023.05.05 |