과제를 받은 루는 다음과 같은 순서대로 과제를 하려고 계획을 세웠습니다.
과제 계획을 담은 이차원 문자열 배열 plans가 매개변수로 주어질 때, 과제를 끝낸 순서대로 이름을 배열에 담아 return 하는 solution 함수를 완성해주세요.
plans의 길이 ≤ 1,000plans의 원소는 [name, start, playtime]의 구조로 이루어져 있습니다.| plans | result |
|---|---|
| [["korean", "11:40", "30"], ["english", "12:10", "20"], ["math", "12:30", "40"]] | ["korean", "english", "math"] |
| [["science", "12:40", "50"], ["music", "12:20", "40"], ["history", "14:00", "30"], ["computer", "12:30", "100"]] | ["science", "history", "computer", "music"] |
| [["aaa", "12:00", "20"], ["bbb", "12:10", "30"], ["ccc", "12:40", "10"]] | ["bbb", "ccc", "aaa"] |
def Minutes(time):
h,m = map(int,time.split(':'))
return h*60 + m
def solution(plans):
answer = [] # 과제를 끝낸 목록
tmp = [] # 중간에 멈춘 과제
plans.sort(key=lambda x:x[1]) # 시간순 정렬
for i in range(len(plans)-1):
name = plans[i][0]
start = Minutes(plans[i][1])
playtime = int(plans[i][2])
if start+playtime <= Minutes(plans[i+1][1]):
res_time = Minutes(plans[i+1][1]) - start - playtime # 과제 끝내고 남는시간
answer.append(name)
while res_time > 0 and len(tmp) > 0:
latest = tmp.pop()
if res_time >= latest[1]:
res_time -= latest[1]
answer.append(latest[0])
else:
latest[1] -= res_time # 멈추고 남은 시간을 계속해서 기록
res_time = 0
tmp.append(latest) # 뺏던거 다시 넣기
else:
tmp.append([name,playtime - (Minutes(plans[i+1][1]) - start)])
answer.append(plans[-1][0])
while len(tmp)>0:
re = tmp.pop()
answer.append(re[0])
return answer
빡구현 + stack 활용..