티스토리 뷰

1. 문제

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

2. 풀이

1. 우선순위 큐를 역순정렬되도록 정의

2. 우선순위 큐에 삽입한다. 반복문을 사용하긴 했지만, N번이기 때문에 별 문제는 없다.

3. while문을 통해 이익 계산식을 수행한다.

 - 역순 정렬을 했기 때문에, 한 상자에 들어가는 마지막 사과가 전체 가격을 결정한다. 

4. 마지막 값만 관심이 있고 나머진 다 pop 처리

 

3. 코드

import java.util.Collections;
import java.util.PriorityQueue;

class Solution {
    public int solution(int k, int m, int[] score) {
        // 우선순위 큐를 역순정렬되도록 정의
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
        int answer = 0;
        // 우선순위 큐에 삽입
        for(int i=0;i<score.length;i++) {
            pq.add(score[i]);
        }
        // m보다 클 경우 이익 계산식 수행
        while(pq.size() >= m) {
            for(int i=0;i<m;i++) {
                // 마지막 삽입되는 값이 가장 작으니 m을 곱해서 이익을 계산
                if (i == m-1) {
                    answer += (pq.poll() * m);
                } else {
                    pq.poll();
                }
            }
        }
        return answer;
    }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함