PYTHON

[python/프로그래머스 LV1] 과일 장수

jy9892 2025. 2. 24. 00:06
반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

📌 문제 이해

1️⃣ 사과 포장 규칙

  • 한 상자에는 m개씩 담아야 합니다.
  • 상자에 담긴 사과 중 최소 점수가 p일 때, 상자의 가격은 p × m입니다.
  • 최대 이익을 얻을 수 있도록 사과를 포장해야 합니다.
  • 사과가 남더라도 m개를 채우지 못하면 버려야 합니다.

 

 

📌 최적의 이익을 구하는 알고리즘

  1. 사과 점수를 내림차순 정렬
    • 큰 점수부터 함께 묶어야 그룹의 최소값이 높아짐.
  2. m개씩 묶어 최대한 많은 상자를 만듦
    • m개가 안 되는 사과는 버림.
  3. 각 그룹의 최소값을 찾아 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