출처: https://bumcrush.tistory.com/182 [맑음때때로 겨울]
반응형

 

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

 

프로그래머스

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

programmers.co.kr

package Programmers;

import java.util.Arrays;
import java.util.Collections;

public class 과일장수 {
    public static void main(String[] args){
        과일장수 T = new 과일장수();
        int k = 4; //과일점수 최대점수
        int m= 3; //M개씩 포장
        int[] score = {4, 1, 2, 2, 4, 4, 4, 4, 1, 2, 4, 2};
        T.solution(k, m, score);
    }

    public int solution(int k, int m, int[] score) {
        int answer = 0;
        //역정렬 해주기위해서 Integer로 감싼다.
        Integer[] scoreBoxed = Arrays.stream(score).boxed().toArray(Integer[]::new);
        Arrays.sort(scoreBoxed, Collections.reverseOrder());
        
        for (int i = m; i <= scoreBoxed.length ; i+=m) {
            int p = scoreBoxed[i-1];//scoreBoxed[i-1] 은 해당 박스에서 가장 작은 숫자가 된다.
            answer += m * p;
        }
        return answer;
    }
}

1. score 역정렬(내림차순)

2. socreBoxed 를 M개(포장해야되는 개수 만큼 증가시키면서 돈다) 

ex.) m= 3 이면 i = 3, 6, 9, 12 이렇게 증가된다.

3. scoreBoxed[i-1] 은 해당박스에서 가장 작은 숫자 p 가된다.

4. m과 p를 곱해서 answer 에 더해준다.

 

※ 더 효율적인 코드는 Integer Boxing 없이 오름차순 정렬 하고, 뒤에서부터 내려오면 됨

반응형

+ Recent posts