Programmers. Task processing.
과제 진행하기
- practice problem
- 정답률: 35%
- 2023.07.30
- 14:10 ~ 15:25 (75 min)
- 후기: 처음 접근을 바로 작업이 가능한 과제를 뽑고, 이후 나머지를 역순으로 더하는 접근을 했지만, 남은 시간에 대해서 이전 작업들이 완료될 수 있다는 점을 다시 고려해 문제를 해결함.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from collections import deque
def solution(plans):
def get_time(time):
hour, minute = int(time[0:2]), int(time[3:5])
return hour * 60 + minute
plans = sorted(list(
map(lambda x: [x[0], get_time(x[1]), int(x[2])], plans)), key=lambda x: x[1])
answer, wait, now = [], deque([plans[0]]), plans[0][1]
for i, v in enumerate(plans[1:]):
next_time = v[1]
while wait:
j, t, q = wait.pop()
if t > now:
now = t
lest = now + q
if lest <= next_time:
now += q
answer.append(j)
else:
now = next_time
wait.append([j, t, lest - next_time])
break
wait.append(v)
while wait:
answer.append(wait.pop()[0])
return answer
This post is licensed under CC BY 4.0 by the author.