문제
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
프로그램이 우선순위를 토대로 처리를 해주면 되는 문제이다.
1. 프로그램이 호출된 시각이 정렬이 되어 있지 않으므로, 호출 시각 > 점수 오름차순으로 정렬한다.
2. 프로그램을 처리할 우선순위 큐를 만들고 점수 > 호출 시각 오름차순으로 정렬 기준을 람다로 만든다.
3. 프로그램이 시작하는 시간에 대한 변수를 만든다.
프로그램이 호출 시각과 시작 시간이 대기한 시간이므로, 필요하다고 생각했다.
4. 프로그램이 시작 시간 이전에 호출 되었던 프로그램들을 모두 우선순위 큐에 넣는다.
5-1. 우선순위 큐에 아무것도 들어가지 않았다는 것은 대기하지 않고 호출된 시각에 바로 시작하는 프로그램이 있다는 의미이므로, 시작시간을 프로그램의 수행시간을 더해준다.
5-2. 우선순위 큐에 들어갔다는 것은 점수에 해당하는 대기시간을 더해주고, 프로그램 시작 시간을 (기존 시작시간 + 프로그램 수행 시간)으로 갱신해준다.
6. answer[0]에 모든 프로그램들이 종료되는 시각을 넣어준다.
소스코드
import java.util.PriorityQueue;
import java.util.Arrays;
class Solution {
private static class Program {
int score;
int enterTime;
int executeTime;
Program(int score, int enterTime, int executeTime) {
this.score = score;
this.enterTime = enterTime;
this.executeTime = executeTime;
}
}
private static final int MAX_SCORE = 11;
public long[] solution(int[][] program) {
Arrays.sort(program, (i1, i2) -> {
if (i1[1] != i2[1]) return i1[1] - i2[1];
return i1[0] - i2[0];
});
PriorityQueue<Program> pq = new PriorityQueue<>((p1, p2) -> {
if (p1.score != p2.score) return p1.score - p2.score;
return p1.enterTime - p2.enterTime;
});
long startTime = program[0][1];
int idx = 0;
long[] answer = new long[MAX_SCORE];
while (idx < program.length || !pq.isEmpty()) {
while (idx < program.length && program[idx][1] <= startTime) {
Program p = new Program(program[idx][0], program[idx][1], program[idx][2]);
pq.add(p);
idx++;
}
if (pq.isEmpty()) {
startTime = program[idx][1];
startTime += program[idx][2];
idx++;
} else {
Program p = pq.remove();
answer[p.score] += startTime - p.enterTime;
startTime += p.executeTime;
}
}
answer[0] = startTime;
return answer;
}
}
실행결과

'Problem Solving > Programmers' 카테고리의 다른 글
| [Programmers] PCCP 모의고사 2회 2번 - 신입사원 교육 - Java (1) | 2025.07.10 |
|---|---|
| [Programmers] PCCP 모의고사 2회 1번 - 실습용 로봇 - Java (0) | 2025.07.09 |
| [Programmers] 문자열 내 마음대로 정렬하기 - Java (0) | 2025.07.07 |
| [Programmers] PCCP 모의고사 1회 3번 - 유전법칙 - Java (0) | 2025.07.06 |
| [Programmers] PCCP 모의고사 1회 2번 - 체육대회 - Java (0) | 2025.07.05 |