✔ 과일 장수
문제 분석하기
사과들의 점수를 오름차순으로 정렬한 후 m개 만큼 뽑았을 때의 가장 최솟값을 구하여 m개만큼 곱하도록 함
손으로 풀어보기
- 사과들의 점수를 오름차순 정렬함
- 사과들의 점수에서 m개만큼 잘라서 가장 마지막 사과의 점수를 p로 하여 사과 한 상자의 가격을 계산
- 최대 이익을 반환
슈도코드 작성하기
k(사과의 최대 점수)
m(한 상자에 들어가는 사과의 수)
score(사과들의 점수)
answer(최대 이익)
score 내림차순 정렬
for(i -> score의 크기부터 시작하여 m씩 감소) {
answer += score[i - m] * m
}
answer 반환
코드 구현하기
/**
* 135808) 과일_장수
*/
public class L063_135808 {
// k(사과의 최대 점수)
// m(한 상자에 들어가는 사과의 수)
// score(사과들의 점수)
public int solution(int k, int m, int[] score) {
// answer(최대 이익)
int answer = 0;
// score 내림차순 정렬
Arrays.sort(score);
// m개씩 끊어가며 사과 한 상자의 가격 계산
for (int i = score.length; i >= m; i -= m) {
answer += score[i - m] * m;
}
// answer 반환
return answer;
}
// 테스트 케이스
public static void main(String[] args) {
L063_135808 solution = new L063_135808();
int k = 3;
int m = 4;
int[] score = { 1, 2, 3, 1, 2, 3, 1 };
int result = solution.solution(k, m, score);
System.out.println(result);
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[133502] 햄버거 만들기 (0) | 2023.12.12 |
---|---|
[134240] 푸드 파이트 대회 (0) | 2023.12.12 |
[136798] 기사단원의 무기 (0) | 2023.12.11 |
[138477] 명예의 전당 (1) (0) | 2023.12.09 |
[140108] 문자열 나누기 (0) | 2023.12.08 |