Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ํž™-๋” ๋งต๊ฒŒ (level.2)

๊ฐ์ž ๐Ÿฅ” 2021. 9. 15. 20:38
๋ฐ˜์‘ํ˜•

 

๋ฌธ์ œ๋งํฌ

https://programmers.co.kr/learn/courses/30/lessons/42626/

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ๋” ๋งต๊ฒŒ

๋งค์šด ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š” Leo๋Š” ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Leo๋Š” ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ๋‘ ๊ฐœ์˜ ์Œ์‹์„ ์•„๋ž˜์™€ ๊ฐ™

programmers.co.kr

 

๋‚˜์˜ํ’€์ด

์ดˆ๋ฐ˜์—๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ํ™œ์šฉํ•ด์„œ ์ตœ์†Œ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ , ๋”ํ•ด์ฃผ๊ณ  ๋„ฃ์–ด์ฃผ๊ณ  ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ถ„๋ช…ํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ, ํšจ์œจ์„ฑํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ผ๋‹จ ๋ฐ”๋กœ heapq์— ๋Œ€ํ•ด์„œ ์ฐพ์•„๋ณด์•˜๋‹ค.

heapq ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ์„ฑ ๊ฐœ์„ ์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•ž์„œ ๋‚ด๊ฐ€ ๋งํ•œ ๋ฐฉ์‹์˜ ์ง„ํ–‰ ๊ณผ์ •์€ ๊ฐ™์ง€๋งŒ heappop์„ํ™œ์šฉํ•ด์„œ ์ตœ์†Œ๊ฐ’์„ ์ฐพ๊ณ , ํž™๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

  1. 1์ฐจ์‹œ๋„
    • ์ฒซ๋ฒˆ์งธ ์‹œ๋„๋กœ ๊ตฌ์„ฑํ•œ ์ฝ”๋“œ๋Š” ํšจ์œจ์„ฑํ…Œ์ŠคํŠธ๋ฅผ ๋‹จํ•˜๋‚˜๋„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ while๋ฌธ์— ์กฐ๊ฑด์„ ๋„ฃ์–ด์ค˜์„œ ์ตœ์†Œ๋กœ ๋Œ๋ ค์ค˜์•ผํ•˜๋‚˜? ๊ณ ๋ฏผํ•˜๋ฉฐ 2์ฐจ ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.
  2. 2์ฐจ์‹œ๋„
    • ํšจ์œจ์ ์ด๊ฒŒ ์ž˜ ์งฏ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ 4๊ฐœ์˜ ํžˆ๋“ ์ผ€์ด์Šค์—์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋–ด๋‹ค. ์ดˆ๋ฐ˜์—๋Š” 2์ฐจ์ฝ”๋“œ์— ๋ฌธ์ œ์ ์„ ์•Œ์ง€ ๋ชปํ–ˆ๋Š”๋ฐ, ์ฝ”๋“œ์— ์จ๋†ง๋“ฏ ๋‚˜์˜ ์ฝ”๋“œ ์ž์ฒด์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.
    • 3์ฐจ์‹œ๋„ ํ›„์— ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด์„œ ์˜ค๋ฅ˜๋ฅผ ์ฐพ์•„๋ƒˆ๋‹ค. 
    • 2์ฐจ์‹œ๋„ ์ฝ”๋“œ์—์„œ ์—ฌ๊ธฐ๊ฐ€ ๋ฌธ์ œ ๋ผ๊ณ  ์จ์žˆ๋Š” ๋ถ€๋ถ„์„ ์‚ดํŽด๋ณด์ž.
    • ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ answer = -1 ํ•˜๋ฉด while๋ฌธ์ด ๋๋‚˜์ง€ ์•Š๊ฒŒ๋œ๋‹ค . ์™œ๋ƒ๋ฉด while๋ฌธ์กฐ๊ฑด์€ k๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ณ„์™ ๋Œ์•„๊ฐ€๋‹ˆ๊นŒ! ๊ทธ๋ž˜์„œ return -1๋กœ ํ•ด์„œ ๋Š์–ด์ค˜์•ผํ•จ์„ ๊นจ๋‹ฌ์•˜๋‹ค. 
    • 2์ฐจ ์ฝ”๋“œ ๋™์ผํ•˜๊ฒŒ ์“ฐ๊ณ , return -1๋งŒ ํ•ด์ฃผ๋ฉด ํ•ด๋‹น ์ฝ”๋“œ๋„ ์ •๋‹ต์ฝ”๋“œ๊ฐ€ ๋œ๋‹ค.
  3. 3์ฐจ์ฝ”๋“œ
    • 2์ฐจ์ฝ”๋“œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ณ  ์™œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ ๊นŒ ์ƒ๊ฐํ•ด๋ณด๋‹ค๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด์ƒ์„ฑํ•ด์„œ ๊ทธ๋Ÿฐ๊ฐ€? ํ•˜๊ณ  ๋ณ€์ˆ˜๋ฅผ ๋ชจ๋‘ ์—†์• ๋ณธ ์ฝ”๋“œ์ด๋‹ค.
    • ํ•˜์ง€๋งŒ ์—ญ์‹œ ๊ทธ๊ฑฐ๋งŒ ๊ณ ์ณ์„œ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค. ์™œ๋ƒ! 2์ฐจ์‹œ๋„์—์„œ ๋งํ–ˆ๋˜ ๋ฌธ์ œ๊ฐ€ ๊ฐ™์ด ๋ฐœ์ƒํ–ˆ๊ธฐ ๋–„๋ฌธ์— ใ…‹ใ…‹ใ…‹
    • ์—ฌ๊ธฐ์„œ ์ˆ˜์ •ํ•˜๋ฉด์„œ return -1์„ ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค... ์‹œ๊ฐ„์ดˆ๊ณผ ์—๋Ÿฌ๋ฅผ ์ˆ˜์ •ํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ํž˜๋“ค๊ตฐ ใ… 
########################################################################
######1์ฐจ์‹œ๋„ (๋Ÿฐํƒ€์ž„์—๋Ÿฌ 6๊ฐœ, ํšจ์œจ์„ฑํ…Œ์ŠคํŠธ ๋ชจ๋‘ ํ†ต๊ณผ x)
import heapq

def solution(scoville, k):
    answer = 0
    heapq.heapify(scoville)
    while 1:
        minNum = heapq.heappop(scoville)
        if minNum >= k:
            return answer
        else:
            minNum2 = heapq.heappop(scoville)
            heapq.heappush(scoville, minNum + (minNum2*2)) #ํž™์€ popํ•˜๋ฉด ์‚ญ์ œ, ๋”ํ•ด์„œ ๋„ฃ์–ด์ฃผ๋Š” ๊ณผ์ • ๋ฐ˜๋ณต
            answer += 1 #๋”ํ•ด์ฃผ๋ฉด ๊ฒฐ๊ด๊ฐ’ +1
    
    if scoville[0] > k:
        return answer
    else:
        return -1


##############################################################################
######2์ฐจ์‹œ๋„ (์‹œ๊ฐ„์ดˆ๊ณผ 4๊ฐœ, ํšจ์œจ์„ฑํ…Œ์ŠคํŠธ ๋ชจ๋‘ ํ†ต๊ณผ) --> ํ•ด๊ฒฐ์ฑ… ์ฐพ์Œ (return ๋ถ€๋ถ„)
import heapq

def solution(scoville, K):
    answer = 0
    heapq.heapify(scoville)
    
    while scoville[0] < K:
        if len(scoville) > 1:
            minNum = heapq.heappop(scoville)
            minNum2 = heapq.heappop(scoville)
            heapq.heappush(scoville, minNum + (minNum2*2))
            answer += 1
        else:
            answer = -1  ## ๐Ÿ‘‰๐Ÿฝ๐Ÿ‘‰๐Ÿฝ๐Ÿ‘‰๐Ÿฝ๐Ÿ‘‰๐Ÿฝ๐Ÿ‘‰๐Ÿฝ ์—ฌ๊ธฐ๊ฐ€ ๋ฌธ์ œ
    return answer

##############################################################################
##3์ฐจ์‹œ๋„ -> ํ˜น์‹œ ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์„œ ๊ทธ๋Ÿฐ๊ฐ€ ํ•˜๊ณ  ๋ณ€์ˆ˜์—†์• ์„œ ๋ฉ”๋ชจ๋ฆฌ๋„ ์ค„์ด๊ณ  ํ•ด๋ดฃ๋Š”๋ฐ ์•„๋‹˜, return์ด ๋ฌธ์ œ์˜€์Œ
import heapq

def solution(scoville, K):
    heapq.heapify(scoville)
    answer = 0
    
    while scoville[0] < K:
        if len(scoville) > 1:
            heapq.heappush(scoville, heapq.heappop(scoville) + (heapq.heappop(scoville)*2))
            answer += 1
        else:
            return  -1
    return answer

 

๋‹ค๋ฅธ์‚ฌ๋žŒ ํ’€์ด

https://programmers.co.kr/learn/courses/30/lessons/42626/solution_groups?language=python3&type=all 

 

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

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

programmers.co.kr

๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค์˜ ํ’€์ด๋ฅผ ๋ณด์•„ํ•˜๋‹ˆ, ๋‹ค๋“ค ์ƒ๊ฐํ•œ ์ฝ”๋“œ์˜ ์ง„ํ–‰๋ฐฉ์‹์€ ๊ฐ™๊ณ  ๋ชจ๋‘ heap์„ ์‚ฌ์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค. ๋‚ด ์ฝ”๋“œ๊ฐ€ ๊ฒฐ์ฝ” ์•ˆ์ข‹์€ ์ฝ”๋“œ๋Š” ์•„๋‹ˆ์—ˆ๊ธฐ์— ๊ธฐ๋ถ„์ด ์ข‹์•˜๋”ฐ!

๋ฐ˜์‘ํ˜•