728x90
반응형
문제출처: rogrammers.co.kr/learn/courses/30/lessons/176962
풀이:
def solution(plans):
answer = []
plans = [[int(i[1][:2])*60+int(i[1][3:]),int(i[2]),i[0]] for i in plans]
plans.sort()
now, works = 0, []
for i in plans:
for j in range(len(works)):
print(works)
if works[j][1] == 0:
continue
elif i[0] >= now + works[j][1]:
answer.append(works[j][2])
now += works[j][1]
works[j][1] = 0
else:
works[j][1] -= (i[0]-now)
break
works = [i] + works
now = i[0]
for i in works:
if i[1] != 0:
answer.append(i[2])
return answer
좀 어렵다
answer = []
plans = [[int(i[1][:2])*60+int(i[1][3:]),int(i[2]),i[0]] for i in plans]
plans.sort()
now, works = 0, []
plans 는 시간들을 분으로 바꾸고, 정렬한다.
now 는 현재 시간을 나타낸다.
works 는 아직 다 완료하지 못한 일들을 저장하기 위한것이다.
for i in plans:
for j in range(len(works)):
if works[j][1] == 0:
continue
elif i[0] >= now + works[j][1]:
answer.append(works[j][2])
now += works[j][1]
works[j][1] = 0
else:
works[j][1] -= (i[0]-now)
break
works = [i] + works
now = i[0]
첫 포문으로 plans 에서 가장 먼저 시작하는 일들이 빼주고. 그리고 남아있는 일들이 있는지 확인하는 두 번째 포문을 써준다.
if 문으로 시간을 다 쓴거면 continue
elif if 로 now + 필요한 시간을 더했을때 i[0] 보다 작으면 현재시간에 더해주고, works[j][1] 에 0 을 해준다.
그 외는 남은시간과, now를 갱신해주고 break 걸어준다.
그리고 works , now 최신화
for i in works:
if i[1] != 0:
answer.append(i[2])
return answer
works 에서 0 이 아닌것들 시간이 부족해서 못 끝낸것들 하나하나 꺼내서 더해주면 된다.
반응형
댓글