알고리즘

프로그래머스 PCCP 모의고사 4번 (JAVA)

박카스마시며코딩 2022. 9. 25. 21:19

https://school.programmers.co.kr/learn/courses/15008/lessons/121686

 

프로그래머스

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

programmers.co.kr

 

저는 우선순위 큐를 통해 해당 문제를 해결하였습니다.

먼저 프로그램을 시간 순서대로 정렬 후 현재 시간까지의 프로그램은 우선순위 큐에 넣고 우선 순위가 높은 프로그램부터 해결해 나갔습니다.

 

 

import java.util.*;
class Solution {
    private static final int SIZE = 10;
    public long[] solution(int[][] programs) {
        // 0 - 점수
        // 1 - 호출된 시각
        // 2- 실행 시간
        long[] answer = new long[SIZE + 1];
        Arrays.sort(programs, (o1,o2) -> {
            return o1[1] - o2[1]; // 호출된 시각
        });
        PriorityQueue<int[]> pq = new PriorityQueue<>((o1,o2) -> {
            if(o1[0] == o2[0]){
                return o1[1] - o2[1];
            }
            return o1[0] - o2[0]; // 점수
        });
        long time = 0;
        for(int i = 0 ; i < programs.length ; i++){
            int[] program = programs[i];
            if(program[1] <= time){
                pq.offer(program);
                continue;
            }else{
                i--;
            }
            if(pq.isEmpty()){
                time = program[1];
                continue;
            }
            int[] now = pq.poll();
            answer[now[0]] += (time - now[1]);
            // System.out.println(time);
            // System.out.println(Arrays.toString(now));
            // System.out.println(Arrays.toString(answer));
            time += now[2];
        }
        while(!pq.isEmpty()){
            int[] now = pq.poll();
            answer[now[0]] += (time - now[1]);
            // System.out.println(time);
            // System.out.println(Arrays.toString(now));
            // System.out.println(Arrays.toString(answer));
            time += now[2];
        }
        answer[0] = time;
        return answer;
    }
}