ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๋ญ ๊ธธ๊ฒŒ ์ž‘์„ฑํ•  ํ•„์š”์—†์ด ๋ฐ”๋กœ ๊ตฌํ˜„ ํ•ด๋ณผ ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™์•„์„œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„์„ ํ–ˆ๋‹ค. (๋‚ด ๊ธ€์”จ ์™œ์ €๋Ÿฌ๋ƒ)

def solution(scoville, K):
    answer = 0

    while scoville[0] < K:
        scoville.sort()
        print("========================")
        print("์Šค์ฝ”๋นŒ: {}".format(scoville))
        new_scoville = scoville[0] + (scoville[1]*2)
        del scoville[0:2]
        print("์Šค์ฝ”๋นŒ: {}".format(scoville))
        scoville.append(new_scoville)
        answer+=1

    if len(scoville) < 1:
        return -1

    return answer


scoville = [1, 2, 3, 9, 10, 12]
print(solution(scoville, 7))

์Œ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์›ํ•˜๋Š” ๊ฐ’์€ ๋‚˜์˜ค๋Š”๋ฐ 

์ฝ”๋“œ ์ฑ„์ ์—์„œ ํƒˆํƒˆ ํ„ธ๋ฆฌ๊ณ ๋ง์•˜๋‹ค. ๋ญ ํž™์ด๋‚˜ ํ๋ฅผ ํ™œ์šฉํ•ด์„œ ํ’€์–ด์•ผํ•˜๋Š”๊ฑฐ๊ฐ™์€๋ฐ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‘์šฉ? ์ด์šฉ? ํ•ด์„œ ์ ์šฉ์„ ํ•˜์ง€ ๋ชปํ•˜๊ฒ ๋‹ค. ๊ทธ๋Ÿฌ๊ณ ๋ณด๋‹ˆ ์ด์ „๊นŒ์ง€์˜ ๋ฌธ์ œ๋„ ์ ์šฉ์„ ์•ˆํ•œ๊ฒƒ๊ฐ™๋„คใ… ใ… 

 

 

 

์ฝ”๋“œ ๋ฆฌ๋ทฐ

  • ๋””๋ฒ„๊น…์šฉ ๋กœ๊ทธ์™€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์ง€์šฐ๊ณ  ์ œ์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ์˜คํผ๋ ˆ์ดํ„ฐ ์‚ฌ์ด๋Š” ํ•œ ์นธ ๋„์šฐ๊ณ  ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
  • ๋” ๋งต๊ฒŒ ๋ฌธ์ œ๋Š” ํž™ ํ˜น์€ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‘ธ๋Š” ๋ฌธ์ œ์ด๋‹ค. (sort๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ  ํ…Œ์ŠคํŠธ์—์„œ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋‹ค.)
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ•ด์ฃผ๊ธฐ

 

์ˆ˜์ •ํ•œ ์ฝ”๋“œ

def solution(scoville, K):
    answer = 0

    while scoville[0] < K:
        scoville.sort()
        # print("========================")
        # print("์ฒ˜์Œ ์Šค์ฝ”๋นŒ: {}".format(scoville))

        # ์ •ํ™•์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์ด ๋ถ€๋ถ„์„ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.
        # ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ๋‘๋ฒˆ์งธ๊ฐ€ ์กด์žฌํ•ด์•ผํ•จ...
        try:
            new_scoville = scoville[0] + (scoville[1]*2)
            del scoville[0:2]
        except IndexError as e:
            break

        # print("์Šค์ฝ”๋นŒ: {}".format(scoville))
        scoville.append(new_scoville)
        answer += 1

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

    return answer

 

 

 

ํž™ ๋ชจ๋“ˆ ์‚ฌ์šฉํ•˜๊ธฐ

Heap์ด๋ž€ ์ž๋ฃŒ๊ตฌ์กฐ ํ˜•ํƒœ ์ค‘ ํ•˜๋‚˜๋กœ์„œ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ตฌ์กฐ์ด๋‹ค. ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ๋ฌธ์ œ ์ค‘ ์ตœ์†Ÿ๊ฐ’, ํ˜น์€ ์ตœ๋Œ“๊ฐ’์„ ๊ณ„์†ํ•ด์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ธ ๊ฒฝ์šฐ Heap ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋ฉด ์‹œ๊ฐ„์ธก๋ฉด์—์„œ ๊ต‰์žฅํžˆ ํšจ์œจ์ ์ธ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

heapq ๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. heapq ๋Š” ๋‚ด์žฅ ๋ชจ๋“ˆ์ด๋ฏ€๋กœ ๋”ฐ๋กœ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Min-priority-queue ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

import heapq

 

 

๊ธฐ์กด ๋ฐฐ์—ด์„ Heap ๊ตฌ์กฐ๋กœ - heapify()

testheap = [1,3,2,6,8,0,6]
heapq.heapify(testheap)
print(testheap)

# print ๊ฒฐ๊ณผ๊ฐ’ => Heap๊ตฌ์กฐ๋กœ ๋ณ€ํ•จ
[0,3,1,6,8,2,6]

 

Heap์— ์š”์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ - heappush(๋ฐฐ์—ด์ด๋ฆ„, ์š”์†Œ)

testheap = []
heapq.heappush(testheap, 3)
heapq.heappush(testheap, 5)
heapq.heappush(testheap, 1)
heapq.heappush(testheap, -3)

print(testheap)

# print ๊ฒฐ๊ณผ๊ฐ’
[-3, 1, 3, 5]

 

Heap ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ - heappop(๋ฐฐ์—ด์ด๋ฆ„)

testheap = []
heapq.heappop(testheap)
heapq.heappop(testheap)

print(testheap)

# ๊ฒฐ๊ณผ๊ฐ’
[3, 5]

์‚ญ์ œ๋ฅผ ํ•ด๋„ ์ž๋™์œผ๋กœ ํž™ ๊ตฌ์กฐ๋Š” ์œ ์ง€๋œ๋‹ค.

 

 

MaxHeap ๊ตฌํ˜„ํ•˜๊ธฐ

๋ฐฉ๋ฒ• 1 

a = [3,5,2,4,1]
testheap = []

for i in a:
	heapq.heappush(testheap, -i)
for i in range(5):
	print(-heapq.heappop(testheap))

# print ๊ฒฐ๊ณผ
5
4
3
2
1

 

๋ฐฉ๋ฒ• 2 - ํŠœํ”Œ ์ด์šฉํ•˜๊ธฐ

a = [3,5,2,4,1]
testheap = []
for i in a:
	heapq.heappush(testheap, (-i,i))
for i in range(5):
	print(heapq.heappop(testheap)[1])

# print ๊ฒฐ๊ณผ =>
5
4
3
2
1

 

 

 

ํž™์„ ์ด์šฉํ•œ ๋ฌธ์ œ ํ’€์ด

# heap์„ ์‚ฌ์šฉํ•œ ํ’€์ด
def solution(scoville, K):
    answer = 0

    heapq.heapify(scoville)

    while scoville[0] < K:
        try:
            heapq.heappush(scoville, heapq.heappop(scoville) + (heapq.heappop(scoville)*2))
            answer += 1
        except IndexError:
            return -1

    return answer

ํ์Œ ๊ทธ๋ ‡๊ตฌ๋จผ

 

Heap์„ ์ด์šฉํ•œ ๋ฌธ์ œ๋Š” ๋ฆฌ์ŠคํŠธ ์š”์†Œ๊ฐ€ ์ž์ฃผ ์ถ”๊ฐ€, ์‚ญ์ œ๋˜๋ฉด์„œ ํ•ญ์ƒ ์ •๋ ฌ๋˜์–ด์•ผํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€