[프로그래머스] 디스크 컨트롤러 (level3, python)

2024. 1. 16. 15:08· Coding Test/Python
목차
  1. 아이디어
  2.  
  3. 전체 코드

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

아이디어

최소힙을 사용하여 푸는 문제였다.

 

for time, job in jobs:
    if start < time <= now:
        heapq.heappush(heap, (job, time))

jobs를 순회하면서 start와 now 사이(이전 작업의 시작-끝 범위)에 시작하는 job을 찾아 최소힙에 넣는다.

이때 job을 기준으로 정렬되어야 하기 때문에 job과 time의 위치를 바꿔 넣는다.

 

if len(heap) > 0:
    job_tmp, time_tmp = heapq.heappop(heap)
    start = now
    now += job_tmp 
    answer += (now - time_tmp) 
    i += 1
    continue
now += 1

 

만약 heap에 값이 있다면,

heap에 있는 값을 꺼낸다.

start를 현재 시간(now)으로 초기화 해준다.

now에 job을 더해서 작업이 완료된 시간을 구한다.

answer에 전체 시간(작업이 완료된 시간 - 호출된 시간)을 더한다.

 

만약 heap에 값이 없다면 현재시간에 +1 해준다.

 

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

위 예시를 넣어서 생각해보자.

start now heap(heappop되는 요소 bold) answer
-1 0 [3, 0] 3
0 3 [6, 2], [9, 1] 10
3 9 [9, 1] 27
9 18    

 

이런 과정을 거치게 된다.

이후 return answer // len(jobs)에 의해서 27//3인 9가 return되는 것이다.

 

전체 코드

import heapq

def solution(jobs):
    start, now, i = -1, 0, 0
    answer = 0
    heap = []
    
    while i < len(jobs):
        for time, job in jobs:
            if start < time <= now:
                heapq.heappush(heap, (job, time))
        
        if len(heap) > 0:
            job_tmp, time_tmp = heapq.heappop(heap)
            start = now
            now += job_tmp 
            answer += (now - time_tmp) 
            i += 1
            continue
        now += 1
        
    return answer // len(jobs)

 

 

 

'Coding Test > Python' 카테고리의 다른 글

[프로그래머스] K번째수 (level1, python)  (0) 2024.01.16
[프로그래머스] 이중우선순위큐 (level3, python)  (0) 2024.01.16
[LeetCode] 290. Word Pattern (easy, python)  (0) 2024.01.15
[LeetCode] 383. Ransom Note (easy, python)  (0) 2024.01.15
[프로그래머스] 더 맵게 (level2, python)  (1) 2024.01.13
  1. 아이디어
  2.  
  3. 전체 코드
'Coding Test/Python' 카테고리의 다른 글
  • [프로그래머스] K번째수 (level1, python)
  • [프로그래머스] 이중우선순위큐 (level3, python)
  • [LeetCode] 290. Word Pattern (easy, python)
  • [LeetCode] 383. Ransom Note (easy, python)
lim.dev
lim.dev
* 깃허브: https://github.com/Ellie010707
lim.dev
코딩림
lim.dev
전체
오늘
어제
  • 분류 전체보기 (205)
    • Network (6)
    • Backend (31)
      • Django (8)
      • Spring Boot (22)
    • Frontend (3)
    • Coding Test (107)
      • Python (93)
      • Java (1)
      • C_C#_C++ (4)
      • SQL (8)
    • Security (40)
      • 해커스쿨_FTZ (19)
      • VM (6)
      • CodeEngn (11)
      • Linux (4)
    • Project (2)
    • etc (12)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • ftz풀이
  • 코드엔진
  • ftz
  • 리눅스마스터
  • 해커스쿨
  • linux
  • ftz write up
  • CodeEngn
  • ftz 풀이
  • 리버싱
  • abex
  • 해커스쿨ftz
  • reversing
  • 해킹
  • ftz writeup
  • 리눅스
  • stolenbyte
  • hacking
  • crackme
  • 리버서

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
lim.dev
[프로그래머스] 디스크 컨트롤러 (level3, python)
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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