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

728x90
λ°˜μ‘ν˜•

문제

 

μ½”λ”©ν…ŒμŠ€νŠΈ μ—°μŠ΅ - μ•Όκ·Ό μ§€μˆ˜

νšŒμ‚¬μ› DemiλŠ” 가끔은 야근을 ν•˜λŠ”λ°μš”, 야근을 ν•˜λ©΄ μ•Όκ·Ό ν”Όλ‘œλ„κ°€ μŒ“μž…λ‹ˆλ‹€. μ•Όκ·Ό ν”Όλ‘œλ„λŠ” 야근을 μ‹œμž‘ν•œ μ‹œμ μ—μ„œ 남은 일의 μž‘μ—…λŸ‰μ„ μ œκ³±ν•˜μ—¬ λ”ν•œ κ°’μž…λ‹ˆλ‹€. DemiλŠ” Nμ‹œκ°„ λ™μ•ˆ μ•Όκ·Ό ν”Όλ‘œλ„

programmers.co.kr

 

문제 풀이

 λ‚¨μ€ 일의 μž‘μ—…λŸ‰μ΄ μžˆμ„ λ•Œ, μ•Όκ·Ό μ§€μˆ˜λ₯Ό μ΅œμ†Œν™”ν•˜μ—¬ λ°˜ν™˜ν•˜λŠ” λ¬Έμ œμ΄λ‹€. 일의 μž‘μ—…λŸ‰μ΄ 있고, 일을 ν•  수 μžˆλŠ” μ‹œκ°„μ΄ μžˆλ‹€λ©΄ μž‘μ—…λŸ‰μ΄ κ°€μž₯ 큰 μž‘μ—…λΆ€ν„° μ²˜λ¦¬ν•˜μ—¬μ•Ό ν•œλ‹€. μ•Όκ·Ό μ§€μˆ˜λŠ” `μž‘μ—…λŸ‰μ˜ 제곱`이기 λ•Œλ¬Έμ΄λ‹€.

 

 λ¬Έμ œλ₯Ό ν’€κΈ° μœ„ν•΄μ„œλŠ” `Python`의 경우 `heapq`λ₯Ό μ‚¬μš©ν•˜μ—¬ ν’€μ–΄μ•Ό ν•œλ‹€. `heapq`λŠ” μ΅œμ†Œ νž™μ΄κΈ° λ•Œλ¬Έμ— μ΅œλŒ€ νž™μ„ λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” 음수 κ°’μœΌλ‘œ λ³€ν™˜ν•˜μ—¬μ•Ό ν•œλ‹€. (μ΄λŠ” worksκ°€ 1 이상 이기에 κ°€λŠ₯ν•˜λ‹€.)

 

μ½”λ“œ

from heapq import heapify, heappush, heappop


def solution(n, works):
    answer = 0
    works = [-work for work in works]
    heapify(works)
    
    while n:
        max_time = -heappop(works)
        
        if not max_time:
            break
            
        heappush(works, -(max_time - 1))
        n -= 1

    return sum(work ** 2 for work in works)
728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€