programmers_과제 진행하기_java
2023. 5. 26. 17:39ㆍAlgorithm/Programmers
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/176962
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*;
class Solution {
public static String[] solution(String[][] plans) {
String[] answer = new String[plans.length];
PriorityQueue<Plan> readyQueue = new PriorityQueue<>(); // 남은 과제 우선순위 큐
Stack<Plan> pauseQueue = new Stack<>(); // 중지 과제 스택
for (String[] plan : plans){ // 우선순위 큐 입력
readyQueue.offer(new Plan(plan));
}
int idx = 0; // answer 인덱스
// 과제 실행
Plan now = readyQueue.poll();
while (true){
Plan next = null;
if (!readyQueue.isEmpty()){ // 새로운 과제가 존재하는 경우
next = readyQueue.peek();
}else { // 새로운 과제가 더이상 없는 경우
answer[idx++] = now.name;
break;
}
if (now.start + now.playtime > next.start){ // 새로운 과제 시작
pauseQueue.push(new Plan(now.name, next.start, now.playtime - (next.start - now.start))); // 실행중 과제 스택에 추가
now = readyQueue.poll();
}
else { // 현재 과제 종료
answer[idx++] = now.name;
if (!pauseQueue.isEmpty()){
int t = now.start + now.playtime;
now = pauseQueue.pop();
now.start = t; // 시작 시간 초기화
}else {
now = readyQueue.poll();
}
}
}
// 중지 목록 모두 실행
while (!pauseQueue.isEmpty()){
now = pauseQueue.pop();
answer[idx++] = now.name;
}
return answer;
}
public static int timeToMin(String time){
int res = 0;
String[] t = time.split(":");
res += Integer.parseInt(t[1]) + Integer.parseInt(t[0]) * 60;
return res;
}
public static class Plan implements Comparable<Plan>{
String name;
int start;
int playtime;
public Plan(String[] plan){
this.name = plan[0];
this.start = timeToMin(plan[1]);
this.playtime = Integer.parseInt(plan[2]);
}
public Plan(String name, int start, int playtime){
this.name = name;
this.start = start;
this.playtime = playtime;
}
@Override
public int compareTo(Plan o) {
return this.start - o.start;
}
@Override
public String
toString() {
return "Plan{" +
"name='" + name + '\'' +
", start=" + start +
", playtime=" + playtime +
'}';
}
}
}
'Algorithm > Programmers' 카테고리의 다른 글
programmers_카카오프렌즈 컬러링북_java (0) | 2023.05.31 |
---|---|
programmers_양궁대회_java (0) | 2023.05.29 |
programmers_요격 시스템_java (0) | 2023.05.25 |
programmers_이모티콘 할인행사_java (0) | 2023.05.25 |
programmers_순위 검색_java (0) | 2023.05.25 |