ํ์ด ๋ฐฉ๋ฒ
1. ์๊ฐ์ ๋ชจ๋ ๋ถ(์ซ์)์ผ๋ก ๋ณํ, ๊ณผ์ ๋ฅผ ์์ ์๊ฐ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํฉ๋๋ค
2. ๊ณผ์ ํ์์ ์๋ก์ด ๊ณผ์ ๋ฅผ ํ๋ ๊บผ๋
๋๋ค
3. ์๋ก์ด ๊ณผ์ ์์ ์๊ฐ์ด ๋์ง ์๊ณ , ์์ ์ ์ฅ๋ ๊ณผ์ ๊ฐ ์์ผ๋ฉด
4. ์์ผ๋ก ํ ๊ณผ์ ์ ์์ ์๊ฐ ์ ๊น์ง ์์ ์ ์ฅ ๊ณผ์ ๋ค์ ๊บผ๋ด์ ์งํํฉ๋๋ค
5. ํ์ฌ ๊ณผ์ ๊ฐ ๊ณํ๋ ๋ง์ง๋ง ๊ณผ์ ๋ผ๋ฉด ๋๊น์ง ๋ง๋ฌด๋ฆฌํฉ๋๋ค
6. ๋ค์ ๊ณผ์ ๊ฐ ์๋ค๋ฉด ๋ค์ ๊ณผ์ ์์ ์๊ฐ๊ณผ ๊ณผ์ ์ข
๋ฃ ์๊ฐ์ ๋น๊ตํ์ฌ ์๋ฃ ๋ฐฐ์ด ๋๋ ์์ ๊ณผ์ ์คํ์ ๋ฃ์ด์ค๋๋ค
7. ๊ณํ๋ ๊ณผ์ ๋ฅผ ๋ชจ๋ ์งํํ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค
8. ๊ณํ๋ ๊ณผ์ ๊ฐ ๋๋๋ฉด ์คํ์์ pop๋๋ ์์๋๋ก ๊ณผ์ ๊ฐ ์งํ๋ฉ๋๋ค
function timeToNumber(time) {
const [hours, minutes] = time.split(':').map(Number);
return hours * 60 + minutes;
}
function solution(plans) {
//์๊ฐ์ ๋ชจ๋ ๋ถ(์ซ์)์ผ๋ก ๋ณํ, ์์ ์๊ฐ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
const newPlans = plans
.map((plan) => {
return [plan[0], timeToNumber(plan[1]), Number(plan[2])];
})
.sort((prev, cur) => {
return prev[1] - cur[1];
});
let now_time = 0;
const tmp_task_stack = [];
const done_tasks = [];
while (newPlans.length) {
const [current, current_start, current_playtime] = newPlans.shift();
const next = newPlans[0];
//์๋ก์ด ๊ณผ์ ์์ ์๊ฐ ์ ์ด๊ณ , ์์ ์ ์ฅ๋ ๊ณผ์ ๊ฐ ์์ผ๋ฉด
//๊ณผ์ ์์ ์๊ฐ๊น์ง ์์ ์ ์ฅ๋ ๊ณผ์ ๋ค์ ์งํํ๋ค.
while (now_time < current_start && tmp_task_stack.length > 0) {
const [tmp_task, tmp_start, tmp_playtime] = tmp_task_stack.pop();
const remains = tmp_playtime - (current_start - now_time);
//๊ณผ์ ์์ ์๊ฐ ์ ๊น์ง ๊บผ๋ธ ์์ ๊ณผ์ ๋ฅผ ๋๋ด์ง ๋ชปํ๋ฉด
if (remains > 0) {
//๋ค์ ์คํ์ ์ถ๊ฐ
tmp_task_stack.push([tmp_task, tmp_start, remains]);
now_time = current_start;
} else {
//๋๋ด๋ฉด ์๋ฃ ๋ฐฐ์ด์ ์ถ๊ฐ
now_time += tmp_playtime;
done_tasks.push(tmp_task);
}
}
//๋ค์ ๊ณผ์ ๊ฐ ์์ผ๋ฉด ํ์ฌ ๊ณผ์ ๋๋ด๊ธฐ
if (!next) {
done_tasks.push(current);
break;
}
const next_start = next[1];
const current_finish = current_start + current_playtime;
//๋ค์ ๊ณผ์ ์ ์ ๋ชป ๋๋ด๋ฉด
if (current_finish > next_start) {
//์์ ๊ณผ์ ์คํ์ ์ถ๊ฐํ๊ณ ์๊ฐ ์
๋ฐ์ดํธ
tmp_task_stack.push([
current,
current_start,
current_finish - next_start,
]);
now_time = next_start;
} else {
done_tasks.push(current);
now_time = current_finish;
}
}
return [...done_tasks, ...tmp_task_stack.map((task) => task[0]).reverse()];
}
๋ค๋ฅธ ๋ถ ํ์ด๋ฅผ ๋ดค๋๋ฐ ์์ฒญ ๊น๋ํ๊ณ ์ง๊ด์ ์ผ๋ก ํธ์ จ๋๋ผ..
1. ์งํ๋ ๊ณผ์ ๋ฐฐ์ด๊ณผ ์งํ ์ ๊ณผ์ ๋ฐฐ์ด(ํ)์ ๋ง๋ฆ
2. ์งํ ์ ๊ณผ์ ๋ ์์ ์๊ฐ์์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
3. ์งํ ์ ๊ณผ์ ๋ฐฐ์ด์ด ๋น ๋๊น์ง ๋ฐ๋ณตํจ
3-1. ์งํ ์ ๊ณผ์ ๋ฐฐ์ด์์ ๊ณต๋ถ ๊ณํ์ ๊บผ๋
3-2. ์งํ๋ ๊ณผ์ ๋ฅผ ์ํํ๋ฉด์ ๊ณต๋ถ ๊ณํ์ ์์ ์๊ฐ์ด ์งํ๋ ๊ณผ์ ์ ์ข ๋ฃ์๊ฐ๋ณด๋ค ์ด๋ฅด๋ฉด, ์งํ๋ ๊ณผ์ ์ ๋๋๋ ์๊ฐ์ ์งํ์ค์ธ ๊ณผ์ ์ ์๊ฐ๋งํผ ๋ํด์ค๋ค(๊ณต๋ถ ๊ณํ์ ๋จผ์ ์งํํด์ผ ํ๋๊น)
3-3. ๊ณต๋ถ ๊ณํ์ ์งํ๋ ๊ณผ์ ๋ฐฐ์ด์ ์ข ๋ฃ์๊ฐ์ ์ถ๊ฐํด์ ๋ฃ์ด์ค๋ค
'๐ง ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ๋น๊ตฌ ์ฐ์ต JS (0) | 2024.01.03 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฆฌ์ฝ์ณ ๋ก๋ด JS (0) | 2024.01.03 |
[ํ๋ก๊ทธ๋๋จธ์ค][PCCP ๊ธฐ์ถ๋ฌธ์ ] 3๋ฒ / ์๋ ๋ก๊ทธ ์๊ณ JSํ์ด (0) | 2023.12.29 |
[ํ๋ก๊ทธ๋๋จธ์ค][PCCP ๊ธฐ์ถ๋ฌธ์ ] 2๋ฒ / ์์ ์์ถ JSํ์ด (0) | 2023.12.29 |
[๋ฐฑ์ค] 2573 ๋น์ฐ js ํ์ด (1) | 2023.12.28 |