[BOJ] 2504 괄호의 값
![[BOJ] 2504 괄호의 값](/assets/img/blog/jeremy-bishop@0,5x.jpg)
이 문제는 9012 괄호 문제와 유사하게 풀이될 것이라고 생각했고 그렇게 풀이를 진행했다.
그런데 괄호들의 값을 곱하고 더하는 지점 등 계산 로직을 어떻게 구현해야할지 감이 안 잡혀서 한참을 헤맸고, temp 변수를 하나 만들어서 값을 관리해보라는 조언을 받아서 완성했다.
조건문은 각 괄호 (
, )
, [
, ]
에 대해서 각각 작성해줬고, 열린 괄호는 stack에 저장하고, 그렇지 않은 경우에는 pop하여 매치하는 방법을 9012번 문제와 마찬가지로 적용하였다.
이 문제의 핵심은 ‘이중 괄호의 값을 어떻게 계산할 것인가?’였는데 괄호를 열때 temp에 해당 괄호 값을 곱해두고, 닫힌 괄호를 만날 때 최종 score에 합해주고 다시 temp에 해당 괄호 값을 나눠주어 외부 괄호 내부의 값이 이중 계산이 될 수 있도록 하는 것이 핵심이었다.
나의 풀이
S = list(input())
stack = []
score = 0
temp = 1
for idx in range(len(S)):
if S[idx] == '(':
stack.append(S[idx])
temp *= 2
elif S[idx] == '[':
stack.append(S[idx])
temp *= 3
elif S[idx] == ')':
if len(stack)<=0 or stack[-1]=="[":
score = 0
break
if S[idx-1] == "(":
score += temp
stack.pop()
temp//=2
else:
if len(stack)<=0 or stack[-1]=="(":
score = 0
break
if S[idx-1] == "[":
score += temp
stack.pop()
temp //=3
if len(stack) > 0:
print(0)
else:
print(score)