알고리즘
프로그래머스 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;
}
}