[Python - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level2] ๋” ๋งต๊ฒŒ

2021. 1. 10. 01:21ใ†๐Ÿ“š Algorithm/๐Ÿ’ช๐Ÿป Python ๋ฌธ์ œ ํ’€์ด

๋ฐ˜์‘ํ˜•
 

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

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

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

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

์„ž์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = ๊ฐ€์žฅ ๋งต์ง€ ์•Š์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ + (๋‘ ๋ฒˆ์งธ๋กœ ๋งต์ง€ ์•Š์€ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ * 2)

Leo๋Š” ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ K ์ด์ƒ์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ ์„ž์Šต๋‹ˆ๋‹ค.
Leo๊ฐ€ ๊ฐ€์ง„ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด scoville๊ณผ ์›ํ•˜๋Š” ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ K๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์„ž์–ด์•ผ ํ•˜๋Š” ์ตœ์†Œ ํšŸ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • scoville์˜ ๊ธธ์ด๋Š” 2 ์ด์ƒ 1,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • K๋Š” 0 ์ด์ƒ 1,000,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • scoville์˜ ์›์†Œ๋Š” ๊ฐ๊ฐ 0 ์ด์ƒ 1,000,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๋ฅผ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” -1์„ return ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

  1. ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ 1์ธ ์Œ์‹๊ณผ 2์ธ ์Œ์‹์„ ์„ž์œผ๋ฉด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.
    ์ƒˆ๋กœ์šด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = 1 + (2 * 2) = 5
    ๊ฐ€์ง„ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = [5, 3, 9, 10, 12]

  2. ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ 3์ธ ์Œ์‹๊ณผ 5์ธ ์Œ์‹์„ ์„ž์œผ๋ฉด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.
    ์ƒˆ๋กœ์šด ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = 3 + (5 * 2) = 13
    ๊ฐ€์ง„ ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜ = [13, 9, 10, 12]

๋ชจ๋“  ์Œ์‹์˜ ์Šค์ฝ”๋นŒ ์ง€์ˆ˜๊ฐ€ 7 ์ด์ƒ์ด ๋˜์—ˆ๊ณ  ์ด๋•Œ ์„ž์€ ํšŸ์ˆ˜๋Š” 2ํšŒ์ž…๋‹ˆ๋‹ค.

ํ’€์ด ๊ณผ์ •

์ž๋ฃŒ๊ตฌ์กฐ heap์„ ์ด์šฉํ•˜์—ฌ ํ’€๋ฉด ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ๋„ ๋ชจ๋‘ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค. 

ํ•˜์ง€๋งŒ slicing์„ ๋„ˆ๋ฌด ์ž์ฃผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜์—ฌ ํšจ์œจ์„ฑ ํ…Œ์ŠคํŠธ์— ์‰ฝ๊ฒŒ ํ†ต๊ณผํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ๋Œ€ํ•œ slicing์„ ์ค„์ด๊ณ , 

while๋ฌธ์„ ์ ๊ฒŒ ๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

while๋ฌธ์˜ ์กฐ๊ฑด์€ scoville ๊ธธ์ด๊ฐ€ 1๋ณด๋‹ค ํด ๋•Œ (์ฆ‰, ๋ชจ๋“  ์›์†Œ๋“ค์„ ๋‹ค ๋Œ๋ฆฐ ๊ฒฐ๊ณผ๊ฐ’์ด K๋ณด๋‹ค ์ž‘์œผ๋ฉด ๊ตณ์ด while๋ฌธ์„ ๊ณ„์† ๋Œ๋ฆด ํ•„์š” ์—†๊ธฐ ๋•Œ๋ฌธ์—) , scoville[0] ์ด K๋ณด๋‹ค ์ž‘์„ ๋•Œ ๋ฅผ ์กฐ๊ฑด์œผ๋กœ ๋‘์—ˆ๋‹ค.

scoville์„ heapq.heapify๋ฅผ ํ†ตํ•ด heap์œผ๋กœ ๋ฐ”๊พธ์–ด, MinHeap์ด ๋˜๋„๋ก ํ•˜์—ฌ scoville[0]์€ ํ•ญ์ƒ ์ž‘์€ ๊ฐ’์ด ๋˜์—ˆ๋‹ค.

heapq.heappop์„ ํ†ตํ•ด ์ œ์ผ ์ž‘์€ ๊ฐ’๊ณผ ๋‘๋ฒˆ ์งธ๋กœ ์ž‘์€ ๊ฐ’์„ ๊บผ๋‚ด K๋ณด๋‹ค ํด ์ˆ˜ ์žˆ๋„๋ก ๊ฐ’์„ ๊ตฌํ–ˆ๊ณ , ๊ทธ ๊ฐ’์„ heapq.heappush๋กœ ๋‹ค์‹œ ๋„ฃ์–ด์ฃผ๋Š” ํ˜•์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. 

while๋ฌธ์„ ๋ชจ๋‘ ๋Œ๊ณ  ๋‚˜์˜ค๋ฉด, ๋ชจ๋“  ์Œ์‹์„ K ์ด์ƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ -1์„ ๋ฆฌํ„ดํ•ด์ค˜์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— len(scoville)์ด 1์ธ ๊ฒฝ์šฐ(๋ชจ๋“  ์›์†Œ๋ฅผ ํ†ตํ•ด ๊ตฌํ•œ ํ•ฉ์ด K๋ณด๋‹ค ์ž‘์•„์„œ while๋ฌธ์„ ๋น ์ ธ๋‚˜์˜จ ๊ฒฝ์šฐ์ด๊ธฐ ๋•Œ๋ฌธ) , scoville[0] < K ์ธ ๊ฒฝ์šฐ์—๋งŒ return -1 ํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.

๋ชจ๋“  ์›์†Œ์˜ ๊ฐ’์„ ํ†ตํ•ด ๊ตฌํ•œ ๊ฐ’์ด ๋”ฑ K์™€ ๊ฐ’์ด ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— if ๋ฌธ ์กฐ๊ฑด์„ ์œ„์™€ ๊ฐ™์ด ์งฐ๋‹ค.

import heapq


def solution(scoville, K):
    answer = 0
    heapq.heapify(scoville)

    while len(scoville) > 1 and scoville[0] < K:
        num = heapq.heappop(scoville) + (heapq.heappop(scoville) * 2)
        answer += 1
        heapq.heappush(scoville, num)

    if len(scoville) == 1 and scoville[0] < K:
        return -1

    return answer
๋ฐ˜์‘ํ˜•