문제 풀이
def solution(jobs):
answer = 0
# 작업의 시작 시간
start_time = 0
# 작업의 개수
jobs_cnt = len(jobs)
# 소요시간이 낮은 순으로 정렬
jobs = sorted(jobs, key=lambda x: x[1])
# jobs 배열이 빌 때까지
while len(jobs):
# 현재 jobs는 소요시간을 기준으로 정렬된 상태. 이제 여기에서 시작시간이 작은 순으로 찾는 작업을 한다.
for i in range(len(jobs)):
# 시작시간보다 작거나 같은 값을 찾는다. 소요시간은 이미 정렬되어 있기 때문에
# 시작시간이 같거나 낮은 값 중 가장 소요시간이 작은 순으로 나오게 된다
if jobs[i][0] <= start_time:
# 현재 진행중인 업무의 소요시간을 더해 작업의 종료 시간, 즉 다음 업무의 시작 시간을 업데이트한다.
start_time += jobs[i][1]
# 현재 작업은 jobs[i][0], 작업이 들어온 시점부터 대기하고 있었다. 그 이전에는 현재 작업이 존재하지 않았기 때문에
# 작업이 들어온 시점(jobs[i][0])을 전체에서 빼주면 대기시간을 포함한 현재 작업의 소요 시간이 남게 된다.
answer += start_time - jobs[i][0]
# 완료한 작업을 제거 후 반복문 탈출.
jobs.pop(i)
break
# 이전 작업이 종료되었음에도 다음 작업이 들어오지 않았을 경우
if i == len(jobs) - 1:
# 시작 시간을 증가시킨다. 작업이 들어오지 않는 상태라도 시간은 계속 흐르기 때문.
start_time += 1
# 평균을 구하고 소수점 이하의 수를 버린다.
# import math 후 answer = math.floor(answer / jobs_cnt) 이런 식으로도 가능하다.
return answer // jobs_cnt
해당 문제는 제가 직접 풀지는 못했고, 파이썬으로 푸셨던 johnyejin 님의 포스팅을 참고하였습니다. 해당 링크는 하단에 같이 게시하겠습니다.
참고 포스팅
[Python][힙] 프로그래머스 - 디스크 컨트롤러(LEVEL3)
문제출처 - https://programmers.co.kr/learn/courses/30/lessons/42627 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이
johnyejin.tistory.com
문제 링크
programmers.co.kr/learn/courses/30/lessons/42627?language=python3
코딩테스트 연습 - 디스크 컨트롤러
하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를
programmers.co.kr
'Python > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [Python] K번째 수 (0) | 2020.12.03 |
---|---|
[프로그래머스] [Python] 이중우선순위큐 (0) | 2020.12.02 |
[프로그래머스] [Python] 더 맵게 (0) | 2020.11.29 |
[프로그래머스] [Python] 프린터 (0) | 2020.11.27 |
[프로그래머스] [Python] 다리를 지나는 트럭 (0) | 2020.11.26 |