반응형
문제
과제 진행하기
https://school.programmers.co.kr/learn/courses/30/lessons/176962
풀이
설명
과제를 끝낸 순서대로 이름을 구하는 문제입니다.
과제를 시작 시간 순서로 정렬합니다.
각 과제에 대해서 다음 작업들을 반복합니다.
- 현재 시간이 다음 과제 시작 시간보다 작을 경우
- 스택에서 최근 과제를 꺼내 다음 과제까지 남은 시간내에 해결할 수 있는지 판단합니다.
- 해결 가능할 경우, 완료 목록에 추가하고 현재 시간을 (현재 시간 + 남은 과제 시간)으로 업데이트 합니다.
- 불가능할 경우, 해당 과제를 다시 스택에 추가하고 현재 시간을 다음 과제의 시작 시간으로 업데이트합니다.
- 스택에서 최근 과제를 꺼내 다음 과제까지 남은 시간내에 해결할 수 있는지 판단합니다.
- 스택에 과제를 추가하고, 현재 시간을 해당 과제의 시작 시간으로 업데이트합니다.
예시 코드
function solution(plans) {
const MINUTES_IN_HOUR = 60;
const answer = [];
const stack = [];
let currentTime = 0;
plans.sort((a, b) => a[1].localeCompare(b[1]));
for (const [name, startTime, duration] of plans) {
const [startHour, startMinute] = startTime.split(":").map(Number);
const startInMinutes = startHour * MINUTES_IN_HOUR + startMinute;
const durationInMinutes = Number(duration);
while (currentTime < startInMinutes) {
if (stack.length === 0) break;
const [topName, topDuration] = stack.pop();
const remainingDuration = topDuration - (startInMinutes - currentTime);
if (remainingDuration > 0) {
stack.push([topName, remainingDuration]);
currentTime = startInMinutes;
} else {
answer.push(topName);
currentTime += topDuration;
}
}
stack.push([name, durationInMinutes]);
currentTime = startInMinutes;
}
while (stack.length > 0) {
const [topName, topDuration] = stack.pop();
answer.push(topName);
}
return answer;
}
'Coding Problem' 카테고리의 다른 글
[프로그래머스] 2개 이하로 다른 비트 (0) | 2024.12.31 |
---|---|
[프로그래머스] N-Queen (0) | 2024.12.30 |
[프로그래머스] 110 옮기기 (0) | 2024.12.27 |
[프로그래머스] 카카오 - 미로 탈출 명령어 (0) | 2024.12.24 |
[프로그래머스] 카카오 - 광고 삽입 (0) | 2024.12.23 |