[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์•ผ๊ทผ ์ง€์ˆ˜ / ํŒŒ์ด์ฌ / Python / heap
Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์•ผ๊ทผ ์ง€์ˆ˜ / ํŒŒ์ด์ฌ / Python / heap

728x90
๋ฐ˜์‘ํ˜•

 

๐Ÿ’ก solutions  

๐Ÿ’ฌ ์•ผ๊ทผ ํ”ผ๋กœ๋„๋ฅผ ์ตœ์†Œํ•œ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฃผ์–ด์ง„ N์‹œ๊ฐ„ ๋™์•ˆ works ๋ฆฌ์ŠคํŠธ ์•ˆ์˜ ์ž‘์—…๋Ÿ‰ ์š”์†Œ๋“ค์„ ๊ฐ€์žฅ ํฐ ๊ฐ’๋ถ€ํ„ฐ -1์”ฉ ์ค„์—ฌ๋‚˜๊ฐ€๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

๐Ÿ’ฌ works์™€ n์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ–ˆ์„ ๋•Œ, ํšจ์œจ์„ฑ์„ ํ†ต๊ณผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ๋กœ์ง์„ ์œ„ํ•ด heaq ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ’ฌ ์ฃผ์–ด์ง„ ์˜ˆ์ œ ์ค‘์— 3๋ฒˆ๊ณผ ๊ฐ™์ด ์ฃผ์–ด์ง„ N์‹œ๊ฐ„ ๋™์•ˆ์— ๋ชจ๋“  ์ž‘์—…๋Ÿ‰์„ ๋ชจ๋‘ ๋๋งˆ์น  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” 0์„ ๋ฐ”๋กœ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ‘จ‍๐Ÿ’ป code  

import heapq

def solution(n, works):
    answer = 0
    if sum(works) <= n:
        return 0

    hq = []
    for i in works:
        heapq.heappush(hq, -i)

    while n:
        max_work = heapq.heappop(hq) + 1
        n -= 1
        heapq.heappush(hq, max_work)

    return sum([i**2 for i in hq])

 

 

๐Ÿ“Œ problem  

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์•ผ๊ทผ ์ง€์ˆ˜

ํšŒ์‚ฌ์› Demi๋Š” ๊ฐ€๋”์€ ์•ผ๊ทผ์„ ํ•˜๋Š”๋ฐ์š”, ์•ผ๊ทผ์„ ํ•˜๋ฉด ์•ผ๊ทผ ํ”ผ๋กœ๋„๊ฐ€ ์Œ“์ž…๋‹ˆ๋‹ค. ์•ผ๊ทผ ํ”ผ๋กœ๋„๋Š” ์•ผ๊ทผ์„ ์‹œ์ž‘ํ•œ ์‹œ์ ์—์„œ ๋‚จ์€ ์ผ์˜ ์ž‘์—…๋Ÿ‰์„ ์ œ๊ณฑํ•˜์—ฌ ๋”ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค. Demi๋Š” N์‹œ๊ฐ„ ๋™์•ˆ ์•ผ๊ทผ ํ”ผ๋กœ๋„

programmers.co.kr


๋ฌธ์ œ ์„ค๋ช…

ํšŒ์‚ฌ์› Demi๋Š” ๊ฐ€๋”์€ ์•ผ๊ทผ์„ ํ•˜๋Š”๋ฐ์š”, ์•ผ๊ทผ์„ ํ•˜๋ฉด ์•ผ๊ทผ ํ”ผ๋กœ๋„๊ฐ€ ์Œ“์ž…๋‹ˆ๋‹ค. ์•ผ๊ทผ ํ”ผ๋กœ๋„๋Š” ์•ผ๊ทผ์„ ์‹œ์ž‘ํ•œ ์‹œ์ ์—์„œ ๋‚จ์€ ์ผ์˜ ์ž‘์—…๋Ÿ‰์„ ์ œ๊ณฑํ•˜์—ฌ ๋”ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค. Demi๋Š” N์‹œ๊ฐ„ ๋™์•ˆ ์•ผ๊ทผ ํ”ผ๋กœ๋„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋„๋ก ์ผํ•  ๊ฒ๋‹ˆ๋‹ค.Demi๊ฐ€ 1์‹œ๊ฐ„ ๋™์•ˆ ์ž‘์—…๋Ÿ‰ 1๋งŒํผ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, ํ‡ด๊ทผ๊นŒ์ง€ ๋‚จ์€ N ์‹œ๊ฐ„๊ณผ ๊ฐ ์ผ์— ๋Œ€ํ•œ ์ž‘์—…๋Ÿ‰ works์— ๋Œ€ํ•ด ์•ผ๊ทผ ํ”ผ๋กœ๋„๋ฅผ ์ตœ์†Œํ™”ํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ solution์„ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ
  • works๋Š” ๊ธธ์ด 1 ์ด์ƒ, 20,000 ์ดํ•˜์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • works์˜ ์›์†Œ๋Š” 50000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • n์€ 1,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
์ž…์ถœ๋ ฅ ์˜ˆ
[4, 3, 3] 4 12
[2, 1, 2] 1 6
[1,1] 3 0
์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1
n=4 ์ผ ๋•Œ, ๋‚จ์€ ์ผ์˜ ์ž‘์—…๋Ÿ‰์ด [4, 3, 3] ์ด๋ผ๋ฉด ์•ผ๊ทผ ์ง€์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด 4์‹œ๊ฐ„๋™์•ˆ ์ผ์„ ํ•œ ๊ฒฐ๊ณผ๋Š” [2, 2, 2]์ž…๋‹ˆ๋‹ค. ์ด ๋•Œ ์•ผ๊ทผ ์ง€์ˆ˜๋Š” 22 + 22 + 22 = 12 ์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2
n=1์ผ ๋•Œ, ๋‚จ์€ ์ผ์˜ ์ž‘์—…๋Ÿ‰์ด [2,1,2]๋ผ๋ฉด ์•ผ๊ทผ ์ง€์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด 1์‹œ๊ฐ„๋™์•ˆ ์ผ์„ ํ•œ ๊ฒฐ๊ณผ๋Š” [1,1,2]์ž…๋‹ˆ๋‹ค. ์•ผ๊ทผ์ง€์ˆ˜๋Š” 12 + 12 + 22 = 6์ž…๋‹ˆ๋‹ค.


๋ฐ˜์‘ํ˜•