이 영역을 누르면 첫 페이지로 이동
자라자 블로그의 첫 페이지로 이동

자라자

페이지 맨 위로 올라가기

[프로그래머스] 디스크 컨트롤러 파이썬

자라자

[프로그래머스] 디스크 컨트롤러 파이썬

  • 2021.11.25 19:11
  • PS/Programmers

프로그래머스로고

[문제 링크]

https://programmers.co.kr/learn/courses/30/lessons/42627

[입출력 예]

jobs return
[[0, 3], [1, 9], [2, 6]] 9

[소스코드]

from collections import deque
def solution(jobs):
import heapq
# while 문 두 번 사용
# 우선 요청 순서대로 정렬하고,
# 하나 처리 후 현재까지 온 요청들을
# 빨리 끝낼 수 있는 것부터 처리
# 1. jobs 정렬
# deque은 sort, sorted와 안맞는다.
jobs=deque(sorted(jobs))
# n은 처리한 요청 수
answer = 0
n = 0
# 2. 최초 시간 설정
# 시간을 따라가면서 작업을 진행한다.
# 처리 시간은 현재시간-요청시간이다.
# 처리시간의 합을 answer에 담는다.
time = jobs[0][0]
# 3. 우선순위 큐 생성
pq = []
# 4. job이 빌 떄까지 다음을 반복합니다.
while jobs:
# 1. jobs의 첫 원소를 꺼내옵니다.
(request, expend) = jobs.popleft()
# 2. n에 1을 더해줍니다.
n += 1
# 3. time에 소요 시간 expend를 더해줍니다.
time += expend
# 4. answer에 현재 시간 time에서 요청 시간 request를 뺸 값을 더해줍니다.
answer += (time - request)
# 5. jobs가 비지 않고, 이미 요청되어있는 작업들을 heapq에 푸쉬.
while jobs and jobs[0][0] < time:
# 1. jobs의 첫 원소를 꺼내옵니다.
(request, expend) = jobs.popleft()
# 2. 해당 원소를 expend 기준으로 pq에다 저장합니다.
# expend 내림차순으로 저장.
heapq.heappush(pq, (-expend, request))
# 6. pq가 빌 떄까지 다음을 반복합니다.
while pq:
# 1. pq에서 원소를 꺼냅니다.
(expend, request) = heapq.heappop(pq)
# 2. jobs에 첫 원소로 저장합니다.
# - 처리 되었기 때문에 한번 더 -해서 제대로.
# appendleft를 하면 결국 처리시간이 큰것부터 들어가기때문에
# 처리시간이 가장 작은 것이 가장 앞에 오게 된다.
jobs.appendleft([request, -expend])
# 5. answer에 n을 나눠준 몫을 저장하고 반환합니다.
answer //= n
return answer

다른 풀이

from collections import deque
def solution(jobs):
import heapq
# while 문 두 번 사용
# 우선 요청 순서대로 정렬하고,
# 하나 처리 후 현재까지 온 요청들을
# 빨리 끝낼 수 있는 것부터 처리
# 1. jobs 정렬
# deque은 sort, sorted와 안맞는다.
jobs=deque(sorted(jobs))
# n은 처리한 요청 수
answer = 0
n = 0
# 2. 최초 시간 설정
# 시간을 따라가면서 작업을 진행한다.
# 처리 시간은 현재시간-요청시간이다.
# 처리시간의 합을 answer에 담는다.
time = jobs[0][0]
# 3. 우선순위 큐 생성
pq = []
# 4. job이 빌 떄까지 다음을 반복합니다.
while jobs:
# 1. jobs의 첫 원소를 꺼내옵니다.
(request, expend) = jobs.popleft()
# 2. n에 1을 더해줍니다.
n += 1
# 3. time에 소요 시간 expend를 더해줍니다.
time += expend
# 4. answer에 현재 시간 time에서 요청 시간 request를 뺸 값을 더해줍니다.
answer += (time - request)
# 5. jobs가 비지 않고, 이미 요청되어있는 작업들을 heapq에 푸쉬.
temp=[]
while jobs and jobs[0][0] < time:
temp.append(jobs.popleft())
temp.sort(key=lambda x:x[1])
jobs=deque(temp)+jobs
# deque을 계속 생성하는 건 좋지 않은 풀이 같다.
# 5. answer에 n을 나눠준 몫을 저장하고 반환합니다.
answer //= n
return answer

'PS > Programmers' 카테고리의 다른 글

[프로그래머스] 네트워크 파이썬  (0) 2021.11.27
[프로그래머스] 정수삼각형 파이썬 풀이  (0) 2021.11.27
[프로그래머스] 가장 먼 노드 파이썬 풀이  (0) 2021.11.25
[프로그래머스] N으로 표현 파이썬 풀이  (0) 2021.11.25
[프로그래머스] 자물쇠와 열쇠 파이썬  (0) 2021.11.11

댓글

댓글을 사용할 수 없습니다.

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [프로그래머스] 네트워크 파이썬

    [프로그래머스] 네트워크 파이썬

    2021.11.27
  • [프로그래머스] 정수삼각형 파이썬 풀이

    [프로그래머스] 정수삼각형 파이썬 풀이

    2021.11.27
  • [프로그래머스] 가장 먼 노드 파이썬 풀이

    [프로그래머스] 가장 먼 노드 파이썬 풀이

    2021.11.25
  • [프로그래머스] N으로 표현 파이썬 풀이

    [프로그래머스] N으로 표현 파이썬 풀이

    2021.11.25
다른 글 더 둘러보기

정보

자라자 블로그의 첫 페이지로 이동

자라자

  • 자라자의 첫 페이지로 이동

검색

메뉴

  • 🏠 HOME
  • 💡 ABOUT
  • 💻 GITHUB

카테고리

  • 분류 전체보기 (91)
    • Tech Note (3)
    • Dev Log (11)
    • Study Log (11)
    • Settings (3)
    • PS (53)
      • Programmers (21)
      • BOJ (32)
    • Diary (10)

인기 글

공지사항

태그

  • ㅣ
  • 공식문서읽기
  • 리액트

정보

자라자의 자라자

자라자

자라자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 자라자. Designed by Fraccino.

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.