[BOJ] 2504 괄호의 값
- 재귀
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)
- 스택
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)
- 열린 괄호
- 스택에 넣기
- ( 가 열리면 2를 곱해주고, [이 열리면 3을 곱해준다.
- 닫힌 괄호
- 스택의 top 꺼내서 쌍 맞추기
- 틀리다면 0 출력
- 값 저장하기
- 직전 괄호가 쌍이 맞는 경우에만 곱하기!
- 해당 값 //n을 해서 원래대로 값을 되돌린다.
- 스택의 top 꺼내서 쌍 맞추기
[참고]
22.2.3
Author And Source
이 문제에 관하여([BOJ] 2504 괄호의 값), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kinnyeri/BOJ-2504-괄호의-값저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)