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;
}
}
'알고리즘' 카테고리의 다른 글
백준 19538번 루머 (JAVA) (0) | 2022.09.27 |
---|---|
백준 14395번 4연산(JAVA) (0) | 2022.09.26 |
프로그래머스 PCCP 모의고사 2번 (JAVA) (1) | 2022.09.24 |
프로그래머스 PCCP 모의고사 1번 (JAVA) (0) | 2022.09.23 |
백준 8394번 악수 (JAVA) (0) | 2022.09.22 |