[BOJ] 2504 괄호의 값

[BOJ] 2504 괄호의 값

문제 링크

이 문제는 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)

© 2021. All rights reserved.