from collections import deque
def solution(jobs):
answer = 0
sorted_jobs = sorted(jobs, key=lambda x : x[1])
queue = deque()
queue.append(0)
for i, ms in enumerate(sorted_jobs): #i는 인덱스 / ms[0]가 요청, ms[1] 걸리는 시간
ex_time = queue.popleft() #이전 걸렸던 시간 0 / 3 / 9
temp = ex_time + ms[1] # 0+3 / 3+6 / 9+9
temp2 = temp - ms[0] #요청부터 걸렸던 시간 3-0 / 9-2 / 18-1
answer += temp2 # 3 7 17
#if i == 0 :
# answer += ms[1] #처음 걸리는 시간
queue.append(temp) #걸리는 시간 넣기 3 9
return answer/len(sorted_jobs)
첫 코드.. 하나의 예제는 맞았으나 다른 예외들이 많나봄....
그래도 나 혼자 코드 작성해보고 예제라도 맞기 시작한게 뿌듯하다!!
그럼 이제 다른 코드를 한 번 확인해보면
def solution(jobs):
# jobs를 요청 시점 기준으로 정렬 (요청 시점이 같은 경우 소요 시간 기준으로 정렬)
jobs.sort(key=lambda x: (x[0], x[1]))
current_time = 0 # 현재 시간
total_waiting_time = 0 # 총 대기 시간
completed_jobs = 0 # 완료한 작업 수
n = len(jobs) # 작업 수
while completed_jobs < n:
# 현재 시점에서 처리할 수 있는 작업 목록
available_jobs = [job for job in jobs if job[0] <= current_time]
if available_jobs:
# 가장 소요 시간이 짧은 작업 선택
job = min(available_jobs, key=lambda x: x[1])
jobs.remove(job) # 처리한 작업 목록에서 제거
current_time += job[1] # 현재 시간 업데이트
total_waiting_time += (current_time - job[0]) # 대기 시간 추가
completed_jobs += 1 # 작업 완료 수 증가
else:
# 대기 중인 작업이 없으면 시간 증가
current_time += 1
# 평균 대기 시간 계산 (소수점 이하 버림)
average_waiting_time = total_waiting_time // n
return average_waiting_time
현재 시간보다 작거나 같은 시점의 작업들만 작업할 수 있는 걸로 해두고, 그 중에서도 소요시간이 짧은 작업을 선택해서 한다는 점!! 을 주목할 수 있었다
역시 lambda를 잘 사용하는게 좋은 것 같다