문제 : https://programmers.co.kr/learn/courses/30/lessons/42627
while 한 번에 1초 지나간다고 생각.
answer : 답 내기 위한 총 시간 더하기
curr_time : 현재 시간(while) 돌아간 횟수
finish_time : 현재 작업 중인 일이 끝마치는 시간
now : 현재 작업중인 일의 소요 시간
대기 heap에 아무 것도 없을 경우를 예외처리로 따로 해줌. 이를 위해서 now 생성한 것.
-> 너무 길고,, 더 짧고 간단하게 구현 가능할 듯
++ 처음에.. return 정수 처리를 안 해서 끙끙 괜히 고민함
import heapq
def solution(jobs):
answer, curr_time, finish_time, now = 0, 0, 0, 0
waiting = []
jobs.sort()
total = len(jobs)
while jobs or waiting:
if jobs:
while jobs[0][0] == curr_time: # 대기 heap에 삽입
start = jobs.pop(0)
if now == 0:
finish_time = curr_time + start[1]
now = start[1]
answer += now
else:
heapq.heappush(waiting, start[1])
if not jobs:
break
if curr_time == finish_time: # 작업 끝났으면 다른 작업 시작
if waiting:
now = heapq.heappop(waiting)
finish_time = curr_time + now
answer += now
else:
now = 0
answer += 1 * len(waiting)
curr_time += 1
return answer//total
시간을 1초 기준으로 한 것이 아니라 그낭 현재 작업을 시작한 시간과 끝난 시간을 기준으로 함.
import heapq
def solution(jobs):
answer, start_time, count = 0, -1, 0
waiting = []
fin_time = jobs[0][0]
while count < len(jobs):
for s, t in jobs:
if start_time < s < fin_time:
heapq.heappush(waiting, [t, s])
if len(waiting) > 0:
new = heapq.heappop(waiting)
start_time = fin_time
fin_time += new[0]
answer += (fin_time - new[1])
count += 1
else:
fin_time += 1
return answer // len(jobs)