์ ์ฒด์ฝ๋
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
๐ฏ ์ฝ๋ ํต์ฌ ์์ฝ
- ( → ์คํ์ ์ถ๊ฐ (์ ๋ง๋๊ธฐ ์์)
- )
- ์์ด ( (()) → ๋ ์ด์
→ ํ์ฌ ์คํ ๊ธธ์ด(=ํ์ฌ ๋จ์ ์๋ ์ ๋ง๋๊ธฐ ๊ฐ์)๋งํผ cnt ์ฆ๊ฐ - ์์ด ) ())) → ์ ๋ง๋๊ธฐ ๋
→ cnt์ 1 ์ถ๊ฐ
- ์์ด ( (()) → ๋ ์ด์
๐ ์ต์ ํ๋ ์ฝ๋
์ด ์ฝ๋๋ ์คํ์ ํ์ฉํ O(n) ์๊ฐ ๋ณต์ก๋ ์๊ณ ๋ฆฌ์ฆ์ด์ผ!
(๋ฌธ์์ด์ ํ ๋ฒ๋ง ์ค์บํ๋ฏ๋ก ๋งค์ฐ ๋น ๋ฆ)
'์๊ณ ๋ฆฌ์ฆ ๐ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
3. ํ์ ํ๊ธฐ์ ๋ง๋ค๊ธฐ : infix-->postfix (์คํ) (0) | 2025.02.13 |
---|---|
1. ๊ฐ์ฅ ํฐ ์(์คํ)_python (0) | 2025.02.13 |
๋๋ช ๋๋ฌผ ์ ์ฐพ๊ธฐ (0) | 2024.11.10 |
์ฝ๋ฉํ ์คํธ ์ถ์ ๊ฒฝํฅ/ ์ฑ์ ๊ธฐ์ค (0) | 2023.10.09 |
[๋ฐฑ์ค 2562] ์ต๋๊ฐ.java (1) | 2023.01.11 |