🐍 μ½”λ”©ν…ŒμŠ€νŠΈ λŒ€λΉ„ : PS

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] λ””μŠ€ν¬ 컨트둀러 (level3, python)

개발자 HOON 2023. 4. 10. 15:57

 

 

πŸ€” 풀이 μ½”λ“œ

 

import heapq
from collections import deque

def solution(jobs):
    # jobs : [μž‘μ—…μ΄ μš”μ²­λ˜λŠ” μ‹œμ , μž‘μ—…μ˜ μ†Œμš”μ‹œκ°„]
    answer = []
    job_queue = deque(sorted(jobs, key=lambda x : x[0]))
    heap = []
    
    time = 0

    while job_queue or heap:
        # μž‘μ—… νμ—μ„œ μ‹€ν–‰κ°€λŠ₯ν•œ νž™μœΌλ‘œ 이동
        while job_queue and job_queue[0][0] <= time:
            start, during = job_queue.popleft()
            # μ†Œμš” μ‹œκ°„ (μš°μ„ μˆœμœ„), μ‹œμž‘ 지점
            heapq.heappush(heap, [during, start])
        
        if heap:
            use_time, start = heapq.heappop(heap)
            cost = use_time + time - start
            answer.append(cost)
            time += use_time
        else:
            time += 1
            
    return sum(answer) // len(answer)

 

 

πŸ€” 문제 풀이

 

μ£Όμ˜ν•΄μ•Ό ν•  점이 μ’€ λ§Žμ€ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€.

- μ£Όμ–΄μ§€λŠ” job이 μž‘μ—…μ΄ μš”μ²­λ˜λŠ” μ‹œμ μœΌλ‘œ μ •λ ¬λ˜μ–΄ λ“€μ–΄μ˜€μ§€ μ•Šμ•˜λ‹€λŠ” 점

- μž‘μ—…μ˜ μš”μ²­ λΆ€ν„° μ’…λ£ŒκΉŒμ§€ κ±Έλ¦¬λŠ” μ‹œκ°„μ˜ 평균을 κ³„μ‚°ν•˜κΈ° μœ„ν•΄μ„œ, λ””μŠ€ν¬ μ»¨νŠΈλ‘€λŸ¬κ°€ μΌν•˜κ³  μžˆμ§€ μ•Šμ„ λ•ŒλŠ” κ³„μ‚°ν•˜λ©΄ μ•ˆλœλ‹€λŠ” 점

- μš°μ„ μˆœμœ„λŠ”, μ†Œμš”μ‹œκ°„μ΄ 짧을 수둝 λ†’μŠ΅λ‹ˆλ‹€.

- μž‘μ—…μ΄ μ‹€ν–‰λ˜κ³  μžˆμ§€ μ•Šμ€ κ²½μš°μ—λŠ” λ¨Όμ € μš”μ²­μ΄ λ“€μ–΄μ˜¨ μž‘μ—…λΆ€ν„° μˆ˜ν–‰ν•©λ‹ˆλ‹€. (μ†Œμš”μ‹œκ°„μ΄ μš°μ„ μˆœμœ„, λ‹€μŒ μš°μ„ μˆœμœ„λŠ” μš”μ²­μ΄ λ“€μ–΄μ˜¨ μ‹œκ°„)

 

λ”°λΌμ„œ μš°μ„  μž‘μ—… μš”μ²­ μ‹œμ μœΌλ‘œ μ •λ ¬ν•œ ν›„, queue에 λ³΄κ΄€ν–ˆμŠ΅λ‹ˆλ‹€.

ν˜„μž¬ λ””μŠ€ν¬ μ»¨νŠΈλ‘€λŸ¬κ°€ 싀행될 수 μžˆλŠ” μž‘μ—…λ“€μ— λŒ€ν•΄μ„œλŠ” heap에 보관을 ν•˜κ³ ,

ν˜„μž¬ μ‹œκ°„μ„ timeμ΄λΌλŠ” λ³€μˆ˜λ‘œ κ΄€λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

 

아직 μš”μ²­μ‹œκ°„μ΄ λ˜μ§€ μ•Šμ•„ queue에 λ‚¨μ•„μžˆκ±°λ‚˜ 아직 싀행이 κ°€λŠ₯은 ν•˜μ§€λ§Œ 아직 μ‹€ν–‰ν•˜μ§€ μ•Šμ€ μž‘μ—…μ΄ heap에 λ‚¨μ•„μžˆλ‹€λ©΄ κ³„μ†ν•΄μ„œ λ‘œμ§μ„ λ°˜λ³΅ν•©λ‹ˆλ‹€.

 

μš°μ„ , job_queueμ—μ„œ μ‹€ν–‰ κ°€λŠ₯ν•œ μž‘μ—…μ„ λͺ¨λ‘ λ½‘μ•„λƒ…λ‹ˆλ‹€. heap에 넣을 λ•ŒλŠ”, μš°μ„ μˆœμœ„λ₯Ό κ³ λ €ν•΄μ„œ λ„£μ–΄μ•Όν•˜λŠ”λ° 생각보닀 λ‹¨μˆœν•˜κ²Œλ„, μš°μ„ μˆœμœ„λŠ” 'μ†Œμš” μ‹œκ°„'이고, μ°¨μš°μ„ μˆœμœ„λŠ” μš”μ²­μ΄ λ“€μ–΄μ˜¨ μ‹œκ°„μž…λ‹ˆλ‹€.

 

λ§Œμ•½ heapμ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” μž‘μ—…μ΄ μžˆλ‹€λ©΄,

heapμ—μ„œ κΊΌλ‚΄μ–΄ μ†Œμš” μ‹œκ°„μ„ κ³„μ‚°ν•˜κ³ , ν˜„μž¬ μ‹œκ°„μ„ μ†Œμš” μ‹œκ°„λ§ŒνΌ κ°±μ‹ ν•©λ‹ˆλ‹€.

λ§Œμ•½ μ‹€ν–‰ν•  수 μžˆλŠ” μž‘μ—…μ΄ μ—†λ‹€λ©΄, time을 1초 늘렀 λ°˜λ³΅ν•©λ‹ˆλ‹€.