[Programmers / Level1] 135808. 과일 장수 (Java)

이하얀·2024년 8월 5일
0

🕊️ 프로그래머스

목록 보기
24/43
post-thumbnail

💡 Info




입출력 조건




입출력 예시




문제 이해


  • 과일 장수의 최대 이익을 구하는 문제
    • (최저 사과 점수) x (한 상자에 담긴 사과 개수) x (상자의 개수)


알고리즘


풀이 시간 : 24분

  1. score 배열 오름차순 정렬
  2. score.length만큼 반복
    • 'score의 전체 길이 - m' -> m개 까지 들어가는 박스 1개를 만드는 방식
    • (최저 사과 점수) x (한 상자에 담긴 사과 개수)에 의해 최소값에 m을 곱하여 더한 것이 answer
import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;
        
        Arrays.sort(score);
        
        for(int i=0; i<score.length; i++){
            int minScore = score[i];
            answer += minScore*m;
        }
        return answer;
    }
}


오답체크


  • 테스트 미통과 문제
    • 최솟값인 score[i]가 선정되려면, 오름차순 정렬이 아닌 내림차순 정렬이 필요
    • 또한, i+1%m이 0일 경우에만 이익으로 추가해야 함.
//before
Arrays.sort(score);

for(int i=0; i<score.length; i++){
	int minScore = score[i];
	answer += minScore*m;
}
//after
Integer[] scoreBox = Arrays.stream(score).boxed().toArray(Integer[]::new);
Arrays.sort(scoreBox, Collections.reverseOrder());
        
for(int i=0; i<scoreBox.length; i++){
	if((i+1) % m == 0){
		int minScore = scoreBox[i];
		answer += minScore*m;
    }
}


최종 풀이


풀이 시간 : 38분(첫 풀이 시간 포함)

  1. score 배열 내림차순 정렬
  2. score.length만큼 반복
    • 'score의 전체 길이 - m' -> m개 까지 들어가는 박스 1개를 만드는 방식
    • (i+1) % m == 0 일 경우에만
      • (최저 사과 점수) x (한 상자에 담긴 사과 개수)에 의해 최소값에 m을 곱하여 더한 것이 answer
import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;
        
        //Arrays.sort(score);
        
        Integer[] scoreBox = Arrays.stream(score).boxed().toArray(Integer[]::new);
        Arrays.sort(scoreBox, Collections.reverseOrder());
        
        for(int i=0; i<scoreBox.length; i++){
            if((i+1) % m == 0){
                int minScore = scoreBox[i];
                answer += minScore*m;
            }
        }
        return answer;
    }
}


결과



🚨 참고할 풀이

import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;
        Arrays.sort(score);
        for(int i = score.length - m; i >= 0; i -= m)
            answer += score[i] * m;
        return answer;
    }
}
profile
언젠가 내 코드로 세상에 기여할 수 있도록, BE 개발 기록 노트☘️

0개의 댓글