카테고리 없음

[백준] 23843: 콘센트 - JAVA

Baspo8 2024. 5. 22. 00:02

https://www.acmicpc.net/problem/23843

 

풀이

충전기 m개로 n개의 전자기기를 충전해야한다.

 

전자기기마다 충전이 완료되는데 필요한 시간이 달라서 충전기에 전자기기를 적절하게 배치해야한다.

 

충전기가 비어있다면 충전에 걸리는 시간이 가장 긴 기기를 배치하는 게 적절했다.

 

따라서 우선순위큐를 이용해 시간이 오래걸리는 순으로 뽑아서 충전기에 넣었다.

 

충전기에 넣으면서 걸리는 시간을 정답에 갱신하면된다.

 


 

메모리: 15476KB
시간: 180ms
언어: Java 11

import java.io.*;
import java.util.*;

public class Main {
    static class Charger {
        PriorityQueue<Integer> chargers;
        PriorityQueue<Integer> electronics;
        int count;

        public Charger(String input1, String input2) {
            chargers = new PriorityQueue<>();
            electronics = new PriorityQueue<>(Collections.reverseOrder());

            StringTokenizer st = new StringTokenizer(input1);
            int n = Integer.parseInt(st.nextToken());
            count = Integer.parseInt(st.nextToken());

            st = new StringTokenizer(input2);
            for (int i = 0; i < n; i++) {
                electronics.add(Integer.parseInt(st.nextToken()));
            }
        }

        public void charge() {
            int result = 0;
            while (!electronics.isEmpty()) {
                int tmp = 0;
                if (chargers.size() < count) {
                    tmp = electronics.poll();
                } else {
                    tmp = chargers.poll() + electronics.poll();
                }
                chargers.add(tmp);
                result = Math.max(tmp, result);
            }

            System.out.println(result);
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Charger charger = new Charger(br.readLine(), br.readLine());
        charger.charge();
    }

}