λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» DEV/γ„΄ problems

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€] νž™ : μ΄μ€‘μš°μ„ μˆœμœ„ν

by vodkassi 2021. 7. 13.
728x90

 

문제 μ„€λͺ…

 

이쀑 μš°μ„ μˆœμœ„ νλŠ” λ‹€μŒ 연산을 ν•  수 μžˆλŠ” 자료ꡬ쑰λ₯Ό λ§ν•©λ‹ˆλ‹€.

λͺ…λ Ήμ–΄μˆ˜μ‹  탑(높이)
I 숫자 큐에 주어진 숫자λ₯Ό μ‚½μž…ν•©λ‹ˆλ‹€.
D 1 νμ—μ„œ μ΅œλŒ“κ°’μ„ μ‚­μ œν•©λ‹ˆλ‹€.
D -1 νμ—μ„œ μ΅œμ†Ÿκ°’μ„ μ‚­μ œν•©λ‹ˆλ‹€.

이쀑 μš°μ„ μˆœμœ„ 큐가 ν•  μ—°μ‚° operationsκ°€ λ§€κ°œλ³€μˆ˜λ‘œ μ£Όμ–΄μ§ˆ λ•Œ, λͺ¨λ“  연산을 μ²˜λ¦¬ν•œ ν›„ 큐가 λΉ„μ–΄μžˆμœΌλ©΄ [0,0] λΉ„μ–΄μžˆμ§€ μ•ŠμœΌλ©΄ [μ΅œλŒ“κ°’, μ΅œμ†Ÿκ°’]을 return ν•˜λ„λ‘ solution ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν•΄μ£Όμ„Έμš”.

 


μ œν•œ 사항

 

  • operationsλŠ” 길이가 1 이상 1,000,000 μ΄ν•˜μΈ λ¬Έμžμ—΄ λ°°μ—΄μž…λ‹ˆλ‹€.
  • operations의 μ›μ†ŒλŠ” 큐가 μˆ˜ν–‰ν•  연산을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ›μ†ŒλŠ” “λͺ…λ Ήμ–΄ 데이터” ν˜•μ‹μœΌλ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€. μ΅œλŒ“κ°’/μ΅œμ†Ÿκ°’μ„ μ‚­μ œν•˜λŠ” μ—°μ‚°μ—μ„œ μ΅œλŒ“κ°’/μ΅œμ†Ÿκ°’μ΄ λ‘˜ 이상인 경우, ν•˜λ‚˜λ§Œ μ‚­μ œν•©λ‹ˆλ‹€.
  • 빈 큐에 데이터λ₯Ό μ‚­μ œν•˜λΌλŠ” 연산이 μ£Όμ–΄μ§ˆ 경우, ν•΄λ‹Ή 연산은 λ¬΄μ‹œν•©λ‹ˆλ‹€.


μž…μΆœλ ₯ 예

 

operations return
["I 16","D 1"] [0,0]
["I 7","I 5","I -5","D -1"] [7,5]

 


μž…μΆœλ ₯ 예 μ„€λͺ…


예제 #1: 16을 μ‚½μž… ν›„ μ΅œλŒ“κ°’μ„ μ‚­μ œν•©λ‹ˆλ‹€. λΉ„μ–΄μžˆμœΌλ―€λ‘œ [0,0]을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
예제 #1: 7, 5, -5λ₯Ό μ‚½μž… ν›„ μ΅œμ†Ÿκ°’μ„ μ‚­μ œν•©λ‹ˆλ‹€. μ΅œλŒ€κ°’ 7, μ΅œμ†Œκ°’ 5λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

 

 

λ‚˜μ˜ μ†”λ£¨μ…˜

 

import heapq 

def solution(operations):
    
    queue = []

    for op in operations:
        if len(queue) == 0:
            if op.startswith("I"):
                heapq.heappush(queue, int(op[2:]))
            else: pass
        else:
            if op.startswith("I"):
                heapq.heappush(queue, int(op[2:]))
            elif op.startswith("D") & op.endswith("-1"):
                heapq.heappop(queue)
            else:
                queue.remove(heapq.nlargest(1, queue)[0])
    try:
        return [heapq.nlargest(1, queue)[0], heapq.nsmallest(1, queue)[0]]
    except:
        return [0, 0]

 

배운 점

 

파이썬의 νž™μ€ 정말 life-saver 이닀. μ•Œκ³ λ¦¬μ¦˜μ„ ν’€λ‹€κ°€ λͺ¨λ₯΄λŠ” λ¬Έμ œκ°€ λ‚˜μ˜€λ©΄ heapq λͺ¨λ“ˆμ„ ν•œ 번쯀 뒀적여 봐도 쒋을 것이닀. 

λŒ“κΈ€