๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์Šคํ„ฐ๋”” 6์ฃผ์ฐจ] ํž™ ์ด์ค‘์šฐ์„ ์ˆœ์œ„ํ Lv.3 - ํŒŒ์ด์ฌ(Python)

๐Ÿ“‘ ๋ฌธ์ œ

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

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์ด์ค‘์šฐ์„ ์ˆœ์œ„ํ

 

programmers.co.kr

๋”๋ณด๊ธฐ

๋ฌธ์ œ ์„ค๋ช…

์ด์ค‘ ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋‹ค์Œ ์—ฐ์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์–ด์ˆ˜์‹  ํƒ‘(๋†’์ด)

I ์ˆซ์ž ํ์— ์ฃผ์–ด์ง„ ์ˆซ์ž๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
D 1 ํ์—์„œ ์ตœ๋Œ“๊ฐ’์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
D -1 ํ์—์„œ ์ตœ์†Ÿ๊ฐ’์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ด์ค‘ ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ํ•  ์—ฐ์‚ฐ operations๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ํ๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด [0,0] ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด [์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’]์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

  • operations๋Š” ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ 1,000,000 ์ดํ•˜์ธ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • operations์˜ ์›์†Œ๋Š” ํ๊ฐ€ ์ˆ˜ํ–‰ํ•  ์—ฐ์‚ฐ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ์›์†Œ๋Š” “๋ช…๋ น์–ด ๋ฐ์ดํ„ฐ” ํ˜•์‹์œผ๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค.- ์ตœ๋Œ“๊ฐ’/์ตœ์†Ÿ๊ฐ’์„ ์‚ญ์ œํ•˜๋Š” ์—ฐ์‚ฐ์—์„œ ์ตœ๋Œ“๊ฐ’/์ตœ์†Ÿ๊ฐ’์ด ๋‘˜ ์ด์ƒ์ธ ๊ฒฝ์šฐ, ํ•˜๋‚˜๋งŒ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  • ๋นˆ ํ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ผ๋Š” ์—ฐ์‚ฐ์ด ์ฃผ์–ด์งˆ ๊ฒฝ์šฐ, ํ•ด๋‹น ์—ฐ์‚ฐ์€ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

โœ’๏ธ ํ’€์ด

 ํŒŒ์ด์ฌ์˜ heapq๋Š” ์ตœ์†Œํž™์„ ๊ธฐ์ค€์œผ๋กœ ์ด๋ค„์ง„๋‹ค๊ณ  ํ•˜๊ธฐ์—, ์ตœ๋Œ€ํž™์˜ ๊ฒฝ์šฐ์—๋Š” ๋งˆ์ด๋„ˆ์Šค๋ฅผ ๋ถ™์—ฌ์„œ ์šด์šฉํ–ˆ๋‹ค.

 ex) 1,3,5์— ๋งˆ์ด๋„ˆ์Šค๋ฅผ ๋ถ™์—ฌ์„œ ์ตœ์†Œํž™์— ๋„ฃ์–ด์ฃผ๋ฉด ์ตœ๋Œ€ํž™์ฒ˜๋Ÿผ -5,-3,-1์œผ๋กœ ์ •๋ ฌ๋œ๋‹ค.

 

โ—ป๏ธ ์˜คํผ๋ ˆ์ด์…˜์— ๋งž๊ฒŒ ๊ฐ’์„ ๋„ฃ๊ฑฐ๋‚˜ ๋บ€๋‹ค.

โ—ป๏ธ ํž™ ๋‘ ๊ฐœ๋Š” ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’์„ ๋นจ๋ฆฌ ์ฐพ๊ธฐ ์œ„ํ•ด ์šด์šฉํ•˜๋Š” ๊ฒƒ์ผ ๋ฟ, ๊ฐ’์ด ๋“ค์–ด๊ฐ€๊ณ  ๋น ์ง€๋Š”๊ฑด ๋˜‘๊ฐ™์ด ์ผ์–ด๋‚˜์•ผ ํ•œ๋‹ค. 

โ—ป๏ธ ์ตœ๋Œ€๊ฐ’์„ ๋นผ๋ฉด max_heap์—์„œ, ์ตœ์†Œ๊ฐ’์„ ๋นผ๋ฉด min_heap์—์„œ ๊ฐ’์„ ๊บผ๋‚ธ ํ›„์— ๋‚จ์€ ๋‹ค๋ฅธ ํž™์—์„œ๋„ ํ•ด๋‹น ๊ฐ’์„ ๋˜‘๊ฐ™์ด ๋นผ์ค€๋‹ค. 

โ—ป๏ธ ๋ชจ๋“  ์—ฐ์‚ฐ์ด ๋๋‚˜๋ฉด max_heap์—์„œ ํ•˜๋‚˜, min_heap์—์„œ ํ•˜๋‚˜๋ฅผ ๊บผ๋‚ด์–ด ์ตœ๋Œ€/์ตœ์†Œ๊ฐ’์œผ๋กœ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

 

 

 

 

 

 

๐Ÿ™‹‍โ™€๏ธ ์˜๊ฒฌ

 ์ตœ๋Œ€ํž™/์ตœ์†Œํž™์„ ๋‘˜ ๋‹ค ๋‘๊ณ  ์“ฐ๋Š”๊ฒŒ ์ข‹์€ ์ฝ”๋“œ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ.....ํ†ต๊ณผํ–ˆ์œผ๋‹ˆ ์˜ฌ๋ ค๋ณธ๋‹ค.

 

 

 

 

 

 

 

๐Ÿ’ป ์†Œ์Šค์ฝ”๋“œ: ํŒŒ์ด์ฌ(Python)

import heapq

def solution(operations):
    min_heap = []
    max_heap = []
    for op in operations:
        o, n = op.split()

        if o=="I":
            # heappush: O(logN)
            heapq.heappush(min_heap, int(n))
            heapq.heappush(max_heap, -int(n))

        if len(min_heap)!=0:
            # heappop: O(logN)
            # heapify: O(N)
            if o=="D" and n=="1":
                max = -heapq.heappop(max_heap)
                min_heap.remove(max)
                heapq.heapify(min_heap)
            elif o=="D" and n=="-1":
                min = heapq.heappop(min_heap)
                max_heap.remove(-min)
                heapq.heapify(max_heap)

    if len(max_heap)==0:
        return [0,0]
    return [-heapq.heappop(max_heap), heapq.heappop(min_heap)]



#์˜ˆ์‹œ
operations = ["I 7","I 5","I -5","D -1"]

#์ถœ๋ ฅ
print(solution(operations))

 

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ