[실버2] 2504번 : 괄호의 값

hyunnn·2021년 4월 9일
0

코딩테스트 준비

목록 보기
72/83

🛠 문제

https://www.acmicpc.net/problem/2504


👩🏻‍💻 해결 방법

우선 문자가 ( 또는 [ 이면 스택에 추가해주었다
)와 ] 인 경우를 나누어 생각하는데, 스택이 비어있지 않을 경우 pop을 해주고 해당 값이 ( 또는 [ 인지 확인해주었다
괄호의 쌍이 맞으면 해당하는 값(2 또는 3)을 넣어주고,
앞에 숫자들이 이미 있는 경우는 숫자들의 합을 구해준 뒤 값을 곱해주었다
만약 괄호의 쌍이 맞지 않다면 0을 출력해주고 exit을 통해 프로그램을 종료해주었다
모든 문자열에 대해 처리를 한 후, 스택을 확인해주며 괄호가 남아있다면 0 출력과 프로그램 종료를 하였고, 숫자만 남아있다면 수들을 모두 더한 값을 출력해주었다

소스 코드

s = input()
st = []

for i in s:
  if i == ')':
    t = 0
    while len(st) != 0:
      top = st.pop()
      if top == '(':
        if t == 0:
          st.append(2)
        else:
          st.append(2*t)
        break
      elif top == '[':
        print(0)
        exit(0)
      else:
        t = t + int(top)

  elif i == ']':
    t = 0
    while len(st) != 0:
      top = st.pop()
      if top == '[':
        if t == 0:
          st.append(3)
        else:
          st.append(3*t)
        break
      elif top == '(':
        print(0)
        exit(0)
      else:
        t = t + int(top)

  else:
    st.append(i)

result = 0
for i in st:
  if i == '(' or i == '[':
    print(0)
    exit(0)
  else:
    result += i

print(result)

관심 있을 만한 포스트

0개의 댓글