내 답안
1def solution(plans):
2 q = []
3 answer = []
4 for plan in plans:
5 h, m = map(int, plan[1].split(':'))
6 plan[1] = h*60 + m
7 plan[2] = int(plan[2])
8 plans.sort(key = lambda x: x[1])
9
10 for plan in plans:
11 if q:
12 free_time = plan[1] - q[-1][1]
13 while q:
14 q[-1][2] -= free_time
15 free_time = -1 * q[-1][2]
16
17 print (free_time, q[-1][2])
18 if free_time < 0:
19 break
20
21 if q[-1][2] <= 0:
22 answer.append(q.pop()[0])
23
24 q.append(plan)
25 while q:
26 answer.append(q.pop()[0])
27
28 return answer
다른 사람 답안
1def solution(plans):
2 plans = sorted(map(lambda x: [x[0], int(x[1][:2]) * 60 + int(x[1][3:]), int(x[2])], plans), key=lambda x: -x[1])
3 q = []
4
5 while plans:
6 cur = plans.pop()
7
8 for idx, item in enumerate(q):
9 if item[0] > cur[1]:
10 q[idx][0] += cur[2]
11
12 q.append([cur[1]+cur[2], cur[0]])
13
14 q.sort()
15 return list(map(lambda x: x[1], q))
문제
- 과제 정보 리스트가 주어진다. (과제 : [이름, 시작시간, 걸리는 시간])
- 진행 중인 과제와 상관없이 과제 시작 시간이 되면 무조건 시작한다
- 진행 중인 과제를 끝냈을때 이전에 멈춰두었던 과제를 순차적으로 진행한다
- TC
- input
[[“korean”, “11:40”, “30”], [“english”, “12:10”, “20”], [“math”, “12:30”, “40”]]
- ouput
[“korean”, “english”, “math”]
- input
해결방법 (다른 사람 답안 기준)
- 과제 시간 전처리 후 시작시간 기준 내림차순으로 정렬한다
- 가장 먼저 시작하는 과제부터 pop한다
- 큐에 저장하는데, 비어있으면 시작시간+걸리는 시간 (끝나는 시간)을 바로 저장한다
- 큐에 원소가 있으면 큐를 순회하면서 현재 pop한 과제보다 늦게 끝나는 과제에 진행시간을 더해준다
- 위 반복문을 다 돌면 [끝나는 시간, 과제 이름]의 형태로 과제들이 저장되어있을 것이다
- 끝나는 시간 기준으로 정렬해서 과제 이름만 뽑아낸다