Computer Science/Data Structures

πŸŒ‰ Monotonic Stack

metamong 2024. 9. 23.

intro

πŸŒ‰ stack의 (파이썬 μ½”λ“œ κΈ°μ€€ append()와 pop()) 연산이 O(1)μž„μ„ κ°μ•ˆν•΄ ν•œ κ³³μ—μ„œ λ„£κ³  λΉΌκ³ λ₯Ό λ°˜λ³΅ν•˜λŠ” κ³Όμ •μ—μ„œ stack의 μ›μ†Œκ°€ μ˜€λ¦„μ°¨μˆœ λ˜λŠ” λ‚΄λ¦Όμ°¨μˆœμ„ μœ μ§€ν•˜κ²Œλ” ν•˜λŠ” stack을 λ§Œλ“œλŠ” μœ ν˜•μ„ 'monotonic stack' μœ ν˜•μ΄λΌκ³  ν•œλ‹€.

 

πŸŒ‰ μ•„λž˜ μ˜ˆμ‹œμ™€ 같이 λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ 이루어진 stack을 μœ μ§€ν•˜λ©΄μ„œ, μƒˆλ‘œμš΄ μ›μ†Œ 6이 λ“€μ–΄μ˜¬ λ•Œ pop() μ—°μ‚° 4번 진행 ν›„ λΉ λ₯΄κ²Œ append() 진행

πŸŒ‰ μ˜€λ¦„μ°¨μˆœ λ˜λŠ” λ‚΄λ¦Όμ°¨μˆœ μˆœμ„œ stack으둜 μ—…λ°μ΄νŠΈ λ˜λŠ” κ³Όμ •μ—μ„œ ν˜„μž¬ μ›μ†Œλ³΄λ‹€ 였λ₯Έμͺ½ λ˜λŠ” μ™Όμͺ½ μ›μ†Œ 쀑 κ°€μž₯ κ°€κΉŒμ΄ μžˆλŠ” μ›μ†Œ μ΅œλŒ€/μ΅œμ†Ÿκ°’ κ΅¬ν•˜κΈ° λ˜λŠ” ν˜„μž¬ μ›μ†Œλ³΄λ‹€ 였λ₯Έμͺ½ λ˜λŠ” μ™Όμͺ½ μ›μ†Œ 쀑 κ°€μž₯ κ°€κΉŒμ΄ μžˆλŠ” μ›μ†Œμ˜ μœ„μΉ˜ κ΅¬ν•˜κΈ°κ°€ λŒ€ν‘œ μœ ν˜•μœΌλ‘œ 많이 λ‚˜μ˜¨λ‹€.

 

πŸŒ‰ μ˜ˆμ‹œ μ½”λ“œ(μ˜€λ¦„μ°¨μˆœμ„ μœ μ§€ν•œ μƒνƒœμ—μ„œ 13을 λ„£μ–΄ stack update)

stack = [3, 5, 9, 12, 15]
x = 13
while stack:
    if stack[-1] >= x:
        stack.pop()
    else:
        stack.append(x)
        break
print(stack) #[3, 5, 9, 12, 13]

Exercises

β˜… <BOJ G3 17299 μ˜€λ“±ν°μˆ˜>

: ν˜„μž¬ μ›μ†Œλ³΄λ‹€ 였λ₯Έμͺ½μ— μžˆμœΌλ©΄μ„œ λ“±μž₯ νšŸμˆ˜κ°€ 큰 수 쀑 κ°€μž₯ μ™Όμͺ½μ— μžˆλŠ” 수 좜λ ₯. λ“±μž₯ νšŸμˆ˜λŠ” λ³„λ„λ‘œ Counter ν™œμš©

 

β˜… <BOJ G4 17298 였큰수>

: 17299와 λ™μΌν•œ 문제. λ‹€λ§Œ λ“±μž₯ νšŸμˆ˜κ°€ μ•„λ‹Œ λ‹¨μˆœνžˆ 큰 수 쀑 κ°€μž₯ μ™Όμͺ½μ— μžˆλŠ” 수 좜λ ₯

 

β˜… <BOJ G5 2493 탑>

: ν˜„μž¬ μ›μ†Œλ³΄λ‹€ μ™Όμͺ½μ— μžˆμœΌλ©΄μ„œ μžμ‹ λ³΄λ‹€ 큰 μ›μ†Œ 쀑 κ°€μž₯ κ°€κΉŒμš΄ μ›μ†Œ μœ„μΉ˜ 좜λ ₯

 

β˜… <BOJ G5 6198 μ˜₯μž₯ 정원 κΎΈλ―ΈκΈ°>

: ν˜„μž¬ μ›μ†Œλ³΄λ‹€ 였λ₯Έμͺ½μ— μžˆμœΌλ©΄μ„œ μžμ‹ λ³΄λ‹€ 큰 μ›μ†Œμ˜ 개수λ₯Ό λˆ„μ μœΌλ‘œ ν•©ν•΄μ„œ 좜λ ₯

 

β˜… <BOJ G5 21956 Treasure>

: monotonic stack의 λ‚΄λΆ€ update 과정을 문제둜 κ·ΈλŒ€λ‘œ ν‘œν˜„

 

β˜… <BOJ G5 24305 ΠžΠ’Π§Π•Π’>

: ν˜„μž¬ μ›μ†Œλ³΄λ‹€ 였λ₯Έμͺ½μ— μžˆμœΌλ©΄μ„œ μžμ‹ λ³΄λ‹€ 큰 수 쀑 κ°€μž₯ μ™Όμͺ½μ— μžˆλŠ” 수 좜λ ₯

'Computer Science > Data Structures' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

πŸ₯ͺArray  (0) 2025.01.17
➑️ Linked List  (0) 2024.09.26
🎊Binary Heap  (0) 2024.07.17
πŸ₯ͺArray & Linked List Intro  (2) 2024.01.08
🌳 Binary Tree 🌳  (1) 2023.12.19

λŒ“κΈ€