๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ’ก

2. ์‡ ๋ง‰๋Œ€๊ธฐ(์Šคํƒ)_python

by @ENFJ 2025. 2. 13.

์ „์ฒด์ฝ”๋“œ

import sys
sys.stdin=open("C:\\input.txt",'rt')
# input : ()(((()())(())()))(())  # ๊ฒฐ๊ณผ : 17

s = input()
stack = []
cnt =0

for i in range(len(s)):
    #์—ด๋ฆฐ ๊ด„ํ˜ธ
    if s[i] =='(':
        stack.append(s[i])
    #๋‹ซ๋Š” ๊ด„ํ˜ธ
    else:
        stack.pop()

        # ๋ฐ”๋กœ ์•ž์ด ์—ด๋ฆฐ ๊ด„ํ˜ธ์ผ๋•Œ
        if s[i-1] == '(':
            cnt += len(stack)
        # ๋ฐ”๋กœ ์•ž์ด ๋‹ซํžŒ ๊ด„ํ˜ธ์ผ๋•Œ
        else:
            cnt+=1

print(cnt)

 


๊ด„ํ˜ธ ๋ฌธ์ž์—ด ()(((()())(())()))(())๋Š” ์‡ ๋ง‰๋Œ€๊ธฐ์™€ ๋ ˆ์ด์ €๋ฅผ ๋‚˜ํƒ€๋ƒ„.

  • ๋ ˆ์ด์ €: () (์—ด๋ฆฐ ๊ด„ํ˜ธ ( ๋‹ค์Œ์— ๋ฐ”๋กœ ๋‹ซํžŒ )์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ)
  • ์‡ ๋ง‰๋Œ€๊ธฐ: ๋ ˆ์ด์ €๋ฅผ ๋งŒ๋‚˜๋ฉด ์กฐ๊ฐ์ด ๋Š˜์–ด๋‚จ

์ด ์ฝ”๋“œ๋Š” ๋ ˆ์ด์ €๊ฐ€ ๋ง‰๋Œ€๊ธฐ๋ฅผ ์ž๋ฅผ ๋•Œ ์กฐ๊ฐ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์•ผ.


๐Ÿ“Œ ์ฝ”๋“œ ๋ถ„์„

 
s = input() # ์ž…๋ ฅ ๋ฐ›๊ธฐ stack = [] # ์Šคํƒ (์‡ ๋ง‰๋Œ€๊ธฐ์˜ ์—ด๋ฆฐ ๊ด„ํ˜ธ๋ฅผ ์ €์žฅ) cnt = 0 # ์กฐ๊ฐ ๊ฐœ์ˆ˜
  • s: ์ž…๋ ฅ ๋ฌธ์ž์—ด
  • stack: ์—ด๋ฆฐ ๊ด„ํ˜ธ๋ฅผ ์ €์žฅํ•˜๋Š” ์Šคํƒ
  • cnt: ์ž˜๋ฆฐ ์กฐ๊ฐ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜

๐Ÿ”„ for๋ฌธ ๋™์ž‘ ๊ณผ์ •

 
for i in range(len(s)): # ๋ฌธ์ž์—ด ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณต

๋ฌธ์ž์—ด์„ ํ•œ ๊ธ€์ž์”ฉ ํ™•์ธํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌ!


โœ… ์—ด๋ฆฐ ๊ด„ํ˜ธ ( ์ผ ๋•Œ → ์Šคํƒ์— ์ถ”๊ฐ€

 
if s[i] == '(': stack.append(s[i])
  • ์—ด๋ฆฐ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ์‹œ์ž‘์ด๋ฏ€๋กœ ์Šคํƒ์— ์ถ”๊ฐ€

โœ… ๋‹ซ๋Š” ๊ด„ํ˜ธ ) ์ผ ๋•Œ → ์Šคํƒ์—์„œ ๊บผ๋ƒ„

 
else: stack.pop() # ์Šคํƒ์—์„œ '(' ์ œ๊ฑฐ (์‡ ๋ง‰๋Œ€๊ธฐ์˜ ๋ or ๋ ˆ์ด์ €)
  • ๋‹ซํžŒ ๊ด„ํ˜ธ๊ฐ€ ๋‚˜์˜ค๋ฉด ์‡ ๋ง‰๋Œ€๊ธฐ ํ•˜๋‚˜๊ฐ€ ๋๋‚˜๊ฑฐ๋‚˜ ๋ ˆ์ด์ €์ž„
  • ๋ฌด์กฐ๊ฑด stack.pop() → ์ด์ „์— ์—ด๋ฆฐ (์„ ์ œ๊ฑฐ

โœ… () → ๋ ˆ์ด์ €์ผ ๊ฒฝ์šฐ

 
if s[i-1] == '(': cnt += len(stack) # ํ˜„์žฌ ๋‚จ์•„ ์žˆ๋Š” ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ ์ถ”๊ฐ€
  • ๋ฐ”๋กœ ์•ž ๊ธ€์ž๊ฐ€ (์ด๋ฉด ๋ ˆ์ด์ €! (())
  • ๋ ˆ์ด์ €๋ฅผ ๋งŒ๋‚˜๋ฉด ํ˜„์žฌ ์Šคํƒ์— ์žˆ๋Š” ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ๊ฐœ์ˆ˜๋งŒํผ ์กฐ๊ฐ ์ถ”๊ฐ€

์˜ˆ์ œ:

(()(((()())(())()))(())) ↑ ↑↑ ↑ ↑ ๋ ˆ์ด์ €๊ฐ€ ์žˆ๋Š” ๊ณณ (์ด์ „ ๋ฌธ์ž๊ฐ€ '(')
 
  • ์ด ์œ„์น˜์—์„œ stack์— ์žˆ๋Š” ์‡ ๋ง‰๋Œ€๊ธฐ ๊ฐœ์ˆ˜๋งŒํผ ์กฐ๊ฐ์ด ์ƒ๊น€!

โœ… ์‡ ๋ง‰๋Œ€๊ธฐ ๋ ()) → ํ•œ ์กฐ๊ฐ ์ถ”๊ฐ€)

 
else: cnt += 1 # ๋ง‰๋Œ€๊ธฐ์˜ ๋ ๋ถ€๋ถ„ → 1์กฐ๊ฐ ์ถ”๊ฐ€
  • ()๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹จ์ˆœํžˆ ))์ผ ๊ฒฝ์šฐ → ์‡ ๋ง‰๋Œ€๊ธฐ์˜ ๋
  • ์ด ๊ฒฝ์šฐ ๋ง‰๋Œ€๊ธฐ์˜ ๋งˆ์ง€๋ง‰ ์กฐ๊ฐ 1๊ฐœ ์ถ”๊ฐ€

๐Ÿ“ ์˜ˆ์ œ ์‹คํ–‰ ๊ณผ์ •

์ž…๋ ฅ:

 
()(((()())(())()))(())

๊ณผ์ •:

i๋ฌธ์ž๋™์ž‘stackcnt

0 ( ์Šคํƒ ์ถ”๊ฐ€ [()] 0
1 ) ๋ ˆ์ด์ € [] 0 + 0 = 0
2 ( ์Šคํƒ ์ถ”๊ฐ€ [()] 0
3 ( ์Šคํƒ ์ถ”๊ฐ€ [(, ()] 0
4 ( ์Šคํƒ ์ถ”๊ฐ€ [(, (, ()] 0
5 ( ์Šคํƒ ์ถ”๊ฐ€ [(, (, (, ()] 0
6 ) ๋ ˆ์ด์ € [(, (, ()] 3 + 0 = 3
7 ( ์Šคํƒ ์ถ”๊ฐ€ [(, (, (, ()] 3
8 ) ๋ง‰๋Œ€๊ธฐ ๋ [(, (, ()] 3 + 1 = 4
9 ) ๋ง‰๋Œ€๊ธฐ ๋ [(, ()] 4 + 1 = 5
10 ( ์Šคํƒ ์ถ”๊ฐ€ [(, (, ()] 5
11 ( ์Šคํƒ ์ถ”๊ฐ€ [(, (, (, ()] 5
12 ) ๋ ˆ์ด์ € [(, (, ()] 5 + 3 = 8
13 ) ๋ง‰๋Œ€๊ธฐ ๋ [(, ()] 8 + 1 = 9
14 ) ๋ง‰๋Œ€๊ธฐ ๋ [()] 9 + 1 = 10
15 ( ์Šคํƒ ์ถ”๊ฐ€ [(, ()] 10
16 ) ๋ ˆ์ด์ € [()] 10 + 1 = 11
17 ) ๋ง‰๋Œ€๊ธฐ ๋ [] 11 + 1 = 12

์ตœ์ข… ๊ฒฐ๊ณผ:

17

๐ŸŽฏ ์ฝ”๋“œ ํ•ต์‹ฌ ์š”์•ฝ

  1. ( → ์Šคํƒ์— ์ถ”๊ฐ€ (์‡ ๋ง‰๋Œ€๊ธฐ ์‹œ์ž‘)
  2. )
    • ์•ž์ด ( (()) → ๋ ˆ์ด์ €
      → ํ˜„์žฌ ์Šคํƒ ๊ธธ์ด(=ํ˜„์žฌ ๋‚จ์•„ ์žˆ๋Š” ์‡ ๋ง‰๋Œ€๊ธฐ ๊ฐœ์ˆ˜)๋งŒํผ cnt ์ฆ๊ฐ€
    • ์•ž์ด ) ())) → ์‡ ๋ง‰๋Œ€๊ธฐ ๋
      → cnt์— 1 ์ถ”๊ฐ€

๐Ÿš€ ์ตœ์ ํ™”๋œ ์ฝ”๋“œ

์ด ์ฝ”๋“œ๋Š” ์Šคํƒ์„ ํ™œ์šฉํ•œ O(n) ์‹œ๊ฐ„ ๋ณต์žก๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์•ผ!
(๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ๋งŒ ์Šค์บ”ํ•˜๋ฏ€๋กœ ๋งค์šฐ ๋น ๋ฆ„)