์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ ํ์ด
๊ดํธ
์ด๋ฆฐ ๊ดํธ((
, [
) ๋ผ๋ฉด ๋ฌด์กฐ๊ฑด ์คํ์ ๋ฃ๊ณ , ๋ซํ ๊ดํธ()
, ]
)๋ผ๋ฉด ์คํ์ ์ง์ด ๋ง๋ ์ด๋ฆฐ ๊ดํธ๊ฐ ์๋์ง ํ์ธํ๋ ๋ฐฉ์
์ซ์
๋ชจ๋ ๊ดํธ๋ค์ ์ง์ด ๋ง๋ค๊ณ ๊ฐ์
์ด๋ฆฐ ๊ดํธ + ๋ซํ ๊ดํธ : ๋ฐ๋ก ์ซ์๋ฅผ ์ถ๊ฐ
์ซ์ + ์ซ์ : ๋ ๊ฐ์ ์ซ์๋ฅผ ๋ํด์ ๋ค์ ์ถ๊ฐ
์ด๋ฆฐ ๊ดํธ + ์ซ์ + ๋ซํ ๊ดํธ : ์ซ์์ ์ด๋ฆฐ/๋ซํ ๊ดํธ์ ์ซ์๋ฅผ ๊ณฑํด์ค๋ค
# 44ms
bkt = input()
stack = ['']
def check():
value = {']': 3, ')': 2}
pair = {']': '[', ')': '('}
for b in bkt:
if b in ('(', '['):
stack.append(b)
continue
if type(stack[-1]) != int and stack[-1] != pair[b]:
return 0
if type(stack[-1]) == int:
if stack[-2] != pair[b]:
return 0
tmp = stack.pop() * value[b]
stack.pop()
stack.append(tmp)
else:
stack.pop()
stack.append(value[b])
# ์ซ์ + ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ ๋ ๊ฐ์ ์ซ์๋ฅผ ๊บผ๋ด๊ณ ๋ํด์ ๋ค์ ์ถ๊ฐํด์ฃผ๋ ๋ฐฉ์
if len(stack) > 3 and type(stack[-1]) == type(stack[-2]) == int:
tmp = stack.pop() + stack.pop()
stack.append(tmp)
if len(stack) > 2 and type(stack[-1]) == type(stack[-2]) == int:
tmp = stack.pop() + stack.pop()
stack.append(tmp)
if len(stack) > 2 or type(stack[-1]) != int:
return 0
else:
return stack[-1]
print(check())
ํ๋ฆฌ๊ธด ํ์ง๋ง ์ด๋ฉ์ด์งํ ํ์ด์ฌ์ด๋ผ์ ํ๋ฆฐ ๋ฌธ์ . ์คํ์ ๊ดํธ(๋ฌธ์์ด)์ ์ซ์๊ฐ ๊ฐ์ด ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ธ์ด๋ก๋ ์๋ํ ์ ์๋ ๋ฐฉ์์ด์๋ค.
๊ดํธ์ ์ซ์๋ฅผ ๋ด์ ์คํ์ ๋ฐ๋ก ๋๋ ๋ฐฉ๋ฒ๋ ์๊ฐํ์ง๋ง ๊ทธ๋ ๊ฒ ๋๋ฉด ์ด๋ ์๊ธฐ์ ๋ค์ด์จ ์ซ์์ธ์ง๋ฅผ ์ ์ฅํ ์ ๋ณด๋ ํ์ํ๊ธฐ ๋๋ฌธ์ ์คํ๋ ค ๋ ๋ณต์กํด์ง๋ ๊ฒ ๊ฐ์์ ์ด ๋ฐฉ๋ฒ์ ํํ๋ค.
๊ดํธ๋ ์คํ์ผ๋ก, ์ซ์๋ ๋ณ์๋ก
์ด ๋ธ๋ก๊ทธ์ ์ฝ๋ ์ฐธ์กฐ
์ผ๋จ ์ด๋ฆฐ ๊ดํธ๊ฐ ๋ค์ด์ค๋ฉด ๋ฌด์กฐ๊ฑด ์ซ์๋ฅผ ๊ณฑํ๊ณ , ๋ซํ ๊ดํธ๊ฐ ๋ค์ด์ค๋ฉด ๋ฐ๋ก ์ง์ ์ ๊ดํธ๊ฐ ์ด๋ฆฐ ๊ดํธ์ธ ๊ฒฝ์ฐ์๋ง ๋์ ๋ ๊ฐ์ ๋ํด์ค๋ค. ๋์ ๋ ๊ฐ์ ์๋๋๋ก ๋๋๋ ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฌด์กฐ๊ฑด ๊ณฑํ๋ ์ซ์๋ก ๋๋ ์ค๋ค
bracket = list(input())
stack = []
answer = 0
tmp = 1
for i in range(len(bracket)):
if bracket[i] == "(":
stack.append(bracket[i])
tmp *= 2
elif bracket[i] == "[":
stack.append(bracket[i])
tmp *= 3
elif bracket[i] == ")":
if not stack or stack[-1] == "[":
answer = 0
break
if bracket[i-1] == "(":
answer += tmp
stack.pop()
tmp //= 2
else:
if not stack or stack[-1] == "(":
answer = 0
break
if bracket[i-1] == "[":
answer += tmp
stack.pop()
tmp //= 3
if stack:
print(0)
else:
print(answer)
์ฌ๊ท๋ฅผ ์ด์ฉํ ํ์ด
์ด๋ฆฐ ๊ดํธ๊ฐ ๋ค์ด์ค๋ฉด ์ฌ๊ท๋ฅผ ํตํด ๋ด๋ถ์ ๊ดํธ๋ค์ ํ์ํด ๊ฐ์ return ํ๋ค. return ๋ ๊ฐ์ ์ซ์๋ฅผ ๊ณฑํด์ฃผ๋ ๋ฐฉ์. ๊ดํธ๊ฐ ์ฌ๋ฐ๋ฅด์ง ์๊ฑฐ๋ ํ๋ค๋ฉด sys.exit()๋ฅผ ํตํด ans์ ๊ฐ์ ์๊ด์์ด 0์ด ์ถ๋ ฅ๋๊ณ ํ๋ก๊ทธ๋จ์ด ๊ฐ์ ์ข ๋ฃ๋๋ค.
์ ๋ ฅ๋ฐ์ ๋ฌธ์์ด์ ๊ฑฐ๊พธ๋ก ๋ค์ง์ด์ ์์ ์๋ ๊ฐ๋ถํฐ pop()ํด์ ๊บผ๋๋ค. ์ด๋ฌ๋ฉด ์ธ๋ฑ์ค์ ๊ฐ๋ค์ด ๋ฐ๋ ํ์๊ฐ ์์ด์ ๋ ๋น ๋ฅธ๊ฐ?
์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ
import sys
input = sys.stdin.readline
s = list(input().rstrip())[::-1]
def cal(start):
r = 0
while s:
a = s.pop()
if a == "(" or a == "[":
r += cal(a)
elif start == "(" and a == ")":
return 2 * max(1,r)
elif start == "[" and a == "]":
return 3 * max(1,r)
# ๋ฆฌ์คํธ๊ฐ ๋น์๋๋ฐ ์ต์ข
return ํ์ง ๋ชปํ๋ค๋ ๊ฒ์ ๊ดํธ์ ๋ฌธ์ ๊ฐ ์์์ ์๋ฏธ
print(0)
sys.exit()
ans = 0
while s:
ans += cal(s.pop())
print(ans)
์คํ... ๊ดํธ...