반응형
https://school.programmers.co.kr/learn/courses/30/lessons/135808
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📌 문제 이해
1️⃣ 사과 포장 규칙
- 한 상자에는 m개씩 담아야 합니다.
- 상자에 담긴 사과 중 최소 점수가 p일 때, 상자의 가격은 p × m입니다.
- 최대 이익을 얻을 수 있도록 사과를 포장해야 합니다.
- 사과가 남더라도 m개를 채우지 못하면 버려야 합니다.
📌 최적의 이익을 구하는 알고리즘
- 사과 점수를 내림차순 정렬
- 큰 점수부터 함께 묶어야 그룹의 최소값이 높아짐.
- m개씩 묶어 최대한 많은 상자를 만듦
- m개가 안 되는 사과는 버림.
- 각 그룹의 최소값을 찾아 p × m을 계산하여 최대 이익을 구함.
def solution(k, m, score):
answer = 0 # 총 이익
score.sort(reverse=True) # 내림차순 정렬
i = 0 # 시작 인덱스
while (i + m <= len(score)): # `m`개 이상 남아있을 때만 반복
box = score[i : i + m] # `m`개씩 슬라이싱하여 상자 만들기
price = min(box) * m # 최소값 × `m`
answer += price # 총 이익 누적
i += m # 다음 그룹으로 이동
return answer # 최대 이익 반환
📌 코드 설명
🛠 핵심 로직
| score.sort(reverse=True) | 사과 점수를 내림차순 정렬하여 최상품부터 그룹화 |
| while (i + m <= len(score)): | m개 이상 남아 있을 때만 그룹을 만듦 (리스트 범위 초과 방지) |
| box = score[i : i + m] | 리스트 슬라이싱을 사용해 m개씩 그룹화 |
| price = min(box) * m | 그룹 내 최소 점수 × m (상자의 가격) |
| answer += price | 총 이익 누적 |
| i += m | 다음 m개를 위해 인덱스 이동 |
📌 실행 흐름 예제
🔹 예제 실행
print(solution(3, 4, [1, 2, 3, 1, 2, 3, 1]))
내림차순 정렬 → [3, 3, 2, 2, 1, 1, 1]
첫 번째 그룹: [3, 3, 2, 2] → 최소값 2 × 4 = 8
남은 [1, 1, 1]은 버림.
최종 이익 = 8
반응형
'PYTHON' 카테고리의 다른 글
| [python/프로그래머스 LV1] K번째수 (4) | 2025.02.05 |
|---|