반응형
프로그래머스 programmers Level1 과일 장수 - java 자바
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/135808
[풀이]
한 상자의 사과 점수는 해당 상자에 담긴 사과 중 가장 낮은 점수로 정해진다.
따라서 가장 큰 점수부터 순서대로 사과상자를 만들면된다.
- 사과의 개수가 한 상자도 못만들면 팔 수 없으므로 이익 0 이다.
- 사과 점수 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;
}
반응형