일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- BOJ
- 프로그래머스
- Naver boostcourse
- Customer service 구현
- QNA 봇
- 백엔드
- 프로그래밍
- 웹 프로그래밍
- AI Tech
- 서블릿
- 부스트캠프
- P Stage
- sts
- 백준
- Django
- 풀스택
- AI Tech 4기
- 웹
- 레벨2
- boostcourse
- 2021 Dev-matching 웹 백엔드 개발자
- 네이버
- 서버
- 구현
- Naver boostcamp
- 장고
- 파이썬
- 대회
- 4기
- cs50
Archives
- Today
- Total
daniel7481의 개발일지
[프로그래머스]디스크 컨트롤러 본문
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/42627
풀이
그리디+힙으로 생각을 하였다. 처음에는 단순히 시간이 적게 거리는 작업을 먼저 해야된다는 생각을 하였는데, 단순히 시간이 적게 걸린다고 요청 시간을 생각하지 않고 먼저 처리할 수는 없었다. 그래서 생각해낸 조건이 현재의 시각을 계산하여 현재 시각 내에서 요청이 들어온 작업 중에서 시간이 가장 적게 걸리는 작업을 선택하게 하였다. 만약 리스트나 다른 자료구조를 사용한다면 탐색하고 pop해주는데에 시간이 너무 오래 걸릴 것이다. 그래서 heap을 사용하여 우선순위큐를 구현해주었다. heap에다가 일단 작업하는 데에 필요한 시간을 기준으로 최소 힙을 만들어주고, 현재 시간을 선언해주고 하나씩 pop해준 다음 만약 요청 시간이 현재 시간보다 적을 시(이미 요청이 됬다) loop를 멈추고 현재 시간에 작업 시간을 더해준 후, answer에 현재 시간 - 요청 시간을 더해주면 된다. 마지막에 평균 시간을 구하라고 했기 때문에 jobs의 길이만큼 나눠주면 된다.
import heapq
def solution(jobs):
answer = 0
heap = []
t = 0
for j in jobs:
heapq.heappush(heap, [j[1], j[0]])
while heap:
tempt = []
flag = False
min_time = 1e9
while heap:
a = heapq.heappop(heap)
if min_time > a[1]:
min_time = a[1]
if a[1] <= t:
t += a[0]
answer += t - a[1]
flag = True
break
else:
tempt.append(a)
if tempt:
for k in tempt:
heapq.heappush(heap, k)
if not flag:
t = min_time
answer //= len(jobs)
return answer
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스]게임 맵 최단거리 (0) | 2022.07.30 |
---|---|
[프로그래머스]네트워크 (0) | 2022.07.29 |
[프로그래머스]타겟 넘버 (0) | 2022.07.21 |
[프로그래머스]프린터 (0) | 2022.07.21 |
[프로그래머스]전화번호 목록 (0) | 2022.07.20 |