csct3434
[level 2] 과제 진행하기 - 176962 본문
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.Arrays;
import java.util.Comparator;
import java.util.Stack;
class Solution {
public String[] solution(String[][] plans) {
String[] answer = new String[plans.length];
int index = 0;
for (String[] plan : plans) {
String[] split = plan[1].split(":");
int minutes = Integer.parseInt(split[0]) * 60 + Integer.parseInt(split[1]);
plan[1] = String.valueOf(minutes);
}
Arrays.sort(plans, Comparator.comparingInt(p -> Integer.parseInt(p[1])));
Stack<int[]> stack = new Stack<>();
for (int taskNumber = 0; taskNumber < plans.length - 1; taskNumber++) {
int currentTaskEndTime = Integer.parseInt(plans[taskNumber][1]) + Integer.parseInt(plans[taskNumber][2]);
int nextTaskStartTime = Integer.parseInt(plans[taskNumber + 1][1]);
if (currentTaskEndTime > nextTaskStartTime) {
stack.push(new int[]{taskNumber, currentTaskEndTime - nextTaskStartTime});
continue;
}
answer[index++] = plans[taskNumber][0];
int freeTime = nextTaskStartTime - currentTaskEndTime;
while (!stack.isEmpty() && freeTime > 0) {
int[] taskInfo = stack.pop();
int remainingTime = taskInfo[1];
if (remainingTime <= freeTime) {
answer[index++] = plans[taskInfo[0]][0];
freeTime -= remainingTime;
continue;
}
stack.push(new int[]{taskInfo[0], remainingTime - freeTime});
break;
}
}
answer[index++] = plans[plans.length - 1][0];
while (!stack.isEmpty()) {
int[] taskInfo = stack.pop();
answer[index++] = plans[taskInfo[0]][0];
}
return answer;
}
}
'프로그래머스' 카테고리의 다른 글
[level 2] [PCCP 기출문제] 2번 / 석유 시추 - 250136 (0) | 2024.02.29 |
---|---|
[level 2] 요격 시스템 - 181188 (0) | 2024.02.29 |
[level 2] 이모티콘 할인행사 - 150368 (0) | 2024.02.29 |
[level 2] 마법의 엘리베이터 - 148653 (0) | 2024.02.29 |
[level 2] 숫자 카드 나누기 - 135807 (0) | 2024.02.29 |