과제를 받은 루는 다음과 같은 순서대로 과제를 하려고 계획을 세웠습니다.
과제 계획을 담은 이차원 문자열 배열 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 활용..