쥬로그

Programmers 코딩테스트 고득점 Kit - 힙 본문

Algorithm/Programmers

Programmers 코딩테스트 고득점 Kit - 힙

쥬쥬씨 2022. 6. 2. 18:19
반응형

 

 

프로그래머스

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

programmers.co.kr

 

더 맵게
import java.util.*;

class Solution {
    public int solution(int[] scoville, int K) {
        int answer = 0;
        PriorityQueue<Integer> minQueue = new PriorityQueue<>();
        for(int s : scoville){
            minQueue.add(s);
        }
        
        while(minQueue.peek() < K){
            int a = minQueue.remove();
            if(minQueue.isEmpty()){
                answer = -1;
                break;
            }
            int b = minQueue.remove();
            int c = a + b * 2;
            
            minQueue.add(c);
            answer++;
        }
        
        return answer;
    }
}

 

 

디스크 컨트롤러
import java.util.*;

class Solution {
    class Task{
        int point;
        int time;
        
        public Task(int point, int time){
            this.point = point;
            this.time = time;
        }
    }
    public int solution(int[][] jobs) {
        // 대기 큐
        PriorityQueue<Task> waitQue = new PriorityQueue(new Comparator<Task>(){
            @Override
            public int compare(Task t1, Task t2){
                return t1.point - t2.point;
            }
        });
        for(int[] job : jobs){
            waitQue.add(new Task(job[0], job[1]));
        }
        
        // 작업 큐
        PriorityQueue<Task> workQue = new PriorityQueue(new Comparator<Task>(){
            @Override
            public int compare(Task t1, Task t2){
                return t1.time - t2.time;
            }
        });
        
        
        int cnt = 0;
        int sum = 0;
        int time = 0;
        while(cnt < jobs.length){
            while(!waitQue.isEmpty() && time >= waitQue.peek().point){
                workQue.offer(waitQue.poll());
            }
            if(!workQue.isEmpty()){
                Task t = workQue.poll();
                sum += t.time + (time - t.point);
                time += t.time;
                cnt++;
            } else {
                time++;
            }
        }
        return sum/cnt;
    }
}

 

 

 

반응형