본문 바로가기
알고리즘/프로그래머스

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

by KDW999 2023. 1. 18.

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

 

프로그래머스

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

programmers.co.kr

 

문제 접근

ㅡ 배열의 길이는 변경이 안되는 거 같아서 배열의 길이를 받는 변수 copyScoreLength 선언

ㅡ 사과 점수를 오름차순 정렬

ㅡ 사과 박스 만큼 돌아가는 반복문과 한 상자에 들어갈 사과 갯수만큼 돌아가는 반복문 

ㅡ 사과 상자 배열 appleBox에 정렬된 사과 점수의 뒷부분부터 저장

ㅡ 한 상자가 만들어지면 마지막 값이 최솟값 → 최소값 * 사과 갯수를 answer에 저장

import java.util.*;

class Solution {
    public int solution(int k, int m, int[] score) {
        int answer = 0;
        int makeBox = score.length / m; // 만들어질 박스 갯수
        int copyScoreLength = score.length;
        
        Arrays.sort(score);
        for(int r=1; r<=makeBox; r++) {
        	 
        int appleBox[] = new int[m];
        for(int i=0; i<m; i++) {
        	appleBox[i] = score[copyScoreLength-1-i]; // applebox 첫 인덱스에 score 배열 마지막 수 부터 저장
        	
        }
        copyScoreLength -= m;
        answer += appleBox[appleBox.length-1] * m;
        }
       
        return answer;
    }
}

 

 

풀이 후 더 간단하게 푼 다른 사람의 풀이도 참고하였다.

 

다른 풀이

class Solution {
    public int solution(int k, int m, int[] score) {
    	int answer = 0;
    	
    	Arrays.sort(score); // 점수 오름차순 정렬    
    	
    	for(int i=score.length; i >=m; i = i-m) { // 배열의 크기부터 시작해서 m씩 감소
    		answer +=score[i-m] * m; // 상자의 최저값 * 사과 갯수
    	}
        return answer;
    }
}

댓글