[JAVA] [LEVEL1] 프로그래머스 - 과일 장수

반응형

프로그래머스 programmers Level1 과일 장수 - java 자바

[문제]

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[풀이]

한 상자의 사과 점수는 해당 상자에 담긴 사과 중 가장 낮은 점수로 정해진다.

따라서 가장 큰 점수부터 순서대로 사과상자를 만들면된다.

  1. 사과의 개수가 한 상자도 못만들면 팔 수 없으므로 이익 0 이다.
  2. 사과 점수  int[] score  를 내림차순으로 정렬하고,  List<Integer> 로 변환한다.
    2.1. 한 상자에 들어가는 사과들 중 최저 점수를 찾는다.
    2.2. 최저 점수 x 한 상자의 사과개수( m ) 값을 찾는다.

 

[java 코드]

/**
 * 과일 장수
 * @param k 사과의 최대 점수
 * @param m 한 상자당 사과 개수
 * @param score 사과들의 점수
 * @return 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익, 이익이 발생하지 않으면 0
 * 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m
 */
public int solution(int k, int m, int[] score) {
    int answer = 0;
    int appleCnt = score.length;
    // 한 상자를 못만들면 팔 수 없으므로 이익 0
    if (appleCnt < m) {
        return answer;
    }
    // 사과 점수 int[] -> List<Integer>, 내림차순 정렬
    List<Integer> appleScore = Arrays.stream(score).boxed().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
    for (int i = 0; i < appleCnt; i++) {
        // (i+1) 을 한 박스의 사과 개수로 나눴을 때 나머지가 0 이면 1박스 채워진 것
        if ((i + 1) % m == 0) {
            // 내림차순 정렬했으므로, 사과 개수의 마지막 인덱스가 최저 점수
            answer += appleScore.get(i) * m;
        }
    }
    return answer;
}
반응형