๐Ÿ—๏ธ Algorithm/โฌ› ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

โฌ› [Programmers] [Python] [Level3] ์•ผ๊ทผ ์ง€์ˆ˜

Dbswnstjd 2023. 4. 12. 15:31

๋ฌธ์ œ

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

ํ’€์ด

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 2๋‹จ๊ณ„ - ์•ผ๊ทผ ์ง€์ˆ˜
import heapq

def solution(n, works):
    answer = 0
    heap = []
    
    # ์‹œ๊ฐ„์•ˆ์— ์ž‘์—…์„ ๋๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
    if sum(works) <= n: 
        return answer

    for work in works:
        # ์ตœ๋Œ€ ํž™
        heapq.heappush(heap, (-work, work)) 
    
    while n > 0:
        work = heapq.heappop(heap)[1] - 1
        heapq.heappush(heap, (-work, work))
        n -= 1
    for h in heap:
        if h[1] < 0:
            continue
        answer += h[1] ** 2
    return answer

print(solution(1,[2,1,2]))

ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ„๋‹จํžˆ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค. 

ํ•˜์ง€๋งŒ ๊ตฌ๊ธ€๋ง์„ ํ•˜๊ธฐ ์ „๊นŒ์ง€ ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ ๋Š” ์ƒ๊ฐ์ง€๋„ ๋ชปํ–ˆ๋‹ค. 

์ตœ๋Œ€ ํž™์„ ๋งŒ๋“ค๊ณ  ์ตœ๋Œ€ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋ฝ‘์•„์„œ -1 ํ•ด์ค€ ํ›„ ๋‹ค์‹œ ํž™์— ๋„ฃ์–ด ์ค€๋‹ค.