ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•

문제

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - λ””μŠ€ν¬ 컨트둀러

ν•˜λ“œλ””μŠ€ν¬λŠ” ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μž‘μ—…λ§Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ””μŠ€ν¬ 컨트둀러λ₯Ό κ΅¬ν˜„ν•˜λŠ” 방법은 μ—¬λŸ¬ 가지가 μžˆμŠ΅λ‹ˆλ‹€. κ°€μž₯ 일반적인 방법은 μš”μ²­μ΄ λ“€μ–΄μ˜¨ μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 예λ₯ΌοΏ½οΏ½

programmers.co.kr

 

문제 풀이

 ν•˜λ“œ λ””μŠ€ν¬μ˜ μš”μ²­λœ μž‘μ—…μ„ μž‘μ—…μ΄ μ’…λ£Œλ˜λŠ” μ‹œκ°„μ΄ λΉ λ₯Έ 순으둜 μ²˜λ¦¬ν•˜λ„λ‘ ν•˜μ—¬ 평균 처리 μ‹œκ°„μ„ λ°˜ν™˜ν•˜λŠ” λ¬Έμ œμ΄λ‹€. μš”μ²­λœ μž‘μ—… 순으둜 μ •λ ¬ 후에 μ²˜λ¦¬ν•  μž‘μ—…μ„ ν•˜λ‚˜μ”© `pop`ν•˜μ—¬ `heap`을 톡해 처리 μ‹œκ°„μ΄ κ°€μž₯ 큰 μž‘μ—…λΆ€ν„° λ£¨νŠΈκ°€ λ˜λ„λ‘ μœ μ§€ν•œλ‹€. 이와 같은 과정을 톡해, λ¬Έμ œμ— μš”κ΅¬ν•˜λŠ” 것과 같이 μž‘μ—…μ„ μ²˜λ¦¬ν•  수 μžˆλ‹€.

 

μ½”λ“œ

import heapq
from collections import deque

RQEUST = 0

def solution(jobs):
    answer = 0
    jobs.sort()
    q = deque(jobs)
    current_time = q[0][RQEUST]
    num_jobs = len(q)
    heap = []

    while q:
        start, process = q.popleft()

        current_time += process
        answer += current_time - start

        while q and q[0][RQEUST] < current_time:
            start, process = q.popleft()
            heapq.heappush(heap, [-process, start])

        while heap:
            process, start = heapq.heappop(heap)
            q.appendleft([start, -process])
    return answer // num_jobs

 

728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€