Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 프로그래머스
- 파이썬
- 플로이드 와샬
- 최소 신장 트리
- 로봇 청소기
- 2020 카카오 인턴십
- BFS
- 크루스칼
- 백트래킹
- 브루트포스
- 조합
- 백준
- 비트마스킹
- 투 포인터
- 시뮬레이션
- 스택
- 플로이드와샬
- 다익스트라
- Spring
- 2018 KAKAO BLIND RECRUITMENT
- 2021 KAKAO BLIND RECRUITMENT
- SWEA
- 2020 KAKAO BLIND RECRUITMENT
- 트라이
- GIT
- 이분탐색
- 투포인터
- 2019 KAKAO BLIND RECRUITMENT
- 구현
- 우선순위큐
Archives
- Today
- Total
개발조아
[프로그래머스] 디스크 컨트롤러 파이썬 본문
728x90
문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42627
OS의 스케쥴링 정책 중 SJF에 대한 알고리즘문제이다
SJF는 현재 작업큐에서 가장 실행시간이 짧은 작업을 우선적으로 처리하는 것이다.
현재 시각을 기준으로 대기열에서 시작 시각이 현재 시각보다 작거나 같은 작업을 작업 큐에 넣고
작업 큐에서는 실행시간이 짧은 것을 처리하는 것이다.
문제의 jobs를 대기열로 그대로 사용하기 위해 요청시각을 기준으로 내림차순으로 정렬하고 끝에서부터 pop한다.
대기열과 작업큐가 다 비워질때까지 반복문을 돌리는데
이때 현재 시각보다 요청 시각이 작은 작업을 작업큐로 옮기고
작업큐에 작업이 들어 있다면 현재 시각을 처리시간만큼 더해주고 총 처리시간을 더해준다.
총 처리시간은 현재 작업의 처리시간 + 대기 시간이다.
대기시간은 현재 시각 - 작업의 요청 시각을 빼준값이다.
만약 작업큐에 작업이 없다면 현재 시각을 1씩 증가 시켜줘야한다.
이것을 안해서 틀리고 있었다.
import heapq
def solution(jobs):
cnt = len(jobs)
jobs.sort(reverse=True)
pq = []
now = 0
answer = 0
while jobs or pq:
while jobs and jobs[-1][0] <= now:
heapq.heappush(pq,(jobs[-1][1],jobs[-1][0]))
jobs.pop()
if pq:
t,req = heapq.heappop(pq)
answer += t+now-req
now += t
else:
now += 1
return answer//cnt
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 순위 검색 파이썬 (0) | 2021.08.13 |
---|---|
[프로그래머스] 메뉴 리뉴얼 파이썬 (0) | 2021.08.13 |
[프로그래머스] 정수 삼각형 파이썬 (0) | 2021.08.13 |
[프로그래머스] 순위 파이썬 (0) | 2021.08.13 |
[프로그래머스] 네트워크 파이썬 (0) | 2021.08.13 |
Comments