[프로그래머스 Level 1] 과일 장수 (JS)

2024. 11. 19. 15:37·SOLVED.
반응형

과일 장수의 최대 이익 계산: 점수에 따라 사과 상자 구성하기

 

이 문제는 주어진 조건에 따라 사과 상자를 구성하고, 최대 이익을 계산하는 문제입니다.

사과는 상태에 따라 1점부터 k점까지 점수가 매겨져 있으며, 한 상자에 m개의 사과를 담습니다. 상자에 담긴 사과 중 가장 낮은 점수를 기준으로 상자 가격이 결정되며, 가능한 한 최대 이익을 얻는 것이 목표입니다.

 


 

1. 문제 정의

 

사과는 1점에서 k점까지 분류되며, 사과 한 상자의 가격은 그 상자에 담긴 사과 중 가장 낮은 점수에 따라 정해집니다. 사과가 주어졌을 때, 다음 조건을 만족하는 상자를 만들어 최대 이익을 계산하는 것이 이번 문제의 핵심입니다

  • 한 상자에는 정확히 m개의 사과를 담습니다.
  • 상자의 가격은 최저 사과 점수 * m으로 계산됩니다.
  • 남는 사과는 버려지며, 최대 이익을 구해야 합니다.

예를 들어, 주어진 사과 점수 배열이 [1, 2, 3, 1, 2, 3, 1]이고, 한 상자에 m = 4개씩 담는다면, 최대 이익은 8이 됩니다.

 

 

2. 문제 해결 과정

이 문제는 사과를 상자에 담아야 하는데, 가능한 한 높은 점수의 사과로 상자를 구성하여 이익을 극대화해야 합니다. 이를 위해 정렬을 활용하여 최적의 상자를 만들 수 있습니다.

 

1. 사과 점수 정렬

최대한 높은 점수를 가진 사과로 상자를 채우기 위해 먼저 사과의 점수 배열을 내림차순으로 정렬합니다. 이렇게 하면 큰 점수부터 상자를 구성할 수 있으며, 상자의 최저 점수를 최대화할 수 있습니다.

2. 상자 구성

정렬된 사과 배열에서 앞에서부터 m개씩 상자를 만들어가며, 각 상자에서 가장 낮은 점수를 기준으로 상자의 가격을 계산합니다. 상자를 만들 수 없는 나머지 사과는 버려지므로, 정확히 m개씩 담을 수 있을 때만 상자를 구성합니다.

3. 최대 이익 계산

각 상자의 가격은 최저 점수 * m으로 계산되며, 모든 상자의 가격을 합한 것이 최종 이익이 됩니다. 남는 사과는 상자에 담지 않기 때문에, 이익을 계산할 때 포함되지 않습니다.

 

 

3. 코드 구현

다음은 위 과정을 바탕으로 한 코드입니다:

function solution(k, m, score) {
    let answer = 0;

    // 1. 사과 점수를 내림차순으로 정렬
    score.sort((a, b) => b - a);

    // 2. m개씩 상자를 구성하며, 각 상자의 최저 점수를 기준으로 가격 계산
    for (let i = 0; i < score.length; i += m) {
        // 상자를 만들 수 없을 만큼 사과가 부족하면 종료
        if (i + m > score.length) break;

        // 현재 상자의 최저 점수는 m번째 사과의 점수
        const boxPrice = score[i + m - 1] * m;
        answer += boxPrice;
    }

    return answer;
}

 


 

 

이 문제는 주어진 조건에 따라 사과 상자를 구성하고, 상자의 가격을 계산하여 최대 이익을 구하는 문제입니다.

핵심은 사과 점수를 내림차순으로 정렬한 후 m개씩 상자를 구성하는 전략을 통해 상자의 최저 점수를 최대화하는 것입니다. 정렬과 반복문을 효율적으로 활용하여, 제한된 시간 안에 문제를 해결할 수 있었습니다.

반응형

'SOLVED.' 카테고리의 다른 글

[프로그래머스] 기사단원의 무기 (JS) (+ 약수 구하는 최적의 알고리즘)  (0) 2024.12.02
[프로그래머스] 문자열 나누기 (JS)  (1) 2024.11.26
[프로그래머스 Level 2] 방문 길이 (JS)  (2) 2024.11.06
[프로그래머스 Level 3] 입국심사 (JS)  (0) 2024.11.05
[프로그래머스] 덧칠하기 (JS)  (1) 2024.08.30
'SOLVED.' 카테고리의 다른 글
  • [프로그래머스] 기사단원의 무기 (JS) (+ 약수 구하는 최적의 알고리즘)
  • [프로그래머스] 문자열 나누기 (JS)
  • [프로그래머스 Level 2] 방문 길이 (JS)
  • [프로그래머스 Level 3] 입국심사 (JS)
healim01
healim01
    반응형
  • healim01
    Hailey Daily
    healim01
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 전체
    • 우테코
    • React
    • JavaScript
    • SOLVED.
    • 개발자의 성장 도파민 기록
    • 개발자의 워크스페이스
    • Every Year Every Month
    • 글쓰기
  • 링크

    • Github
  • 인기 글

  • hELLO· Designed By정상우.v4.10.2
healim01
[프로그래머스 Level 1] 과일 장수 (JS)
상단으로

티스토리툴바