[baekjoon] 2504 괄호의 값 골드5

윤주원·2024년 12월 5일
0

baekjoon

목록 보기
8/13
post-thumbnail

문제 링크
https://www.acmicpc.net/problem/2504

설명

  • () -> 2의 값
  • [] -> 3의 값
  • ([]) -> 2 * 3
  • [()] -> 3 * 2
  • 닫힌 괄호끼리의 값은 더하기
  • ()[[]])([])’ 의 괄호값 -> ‘()[[]]’ 의 괄호값이 2 + 3×3=11 이므로 ‘(()[[]])’의 괄호값은 2×11=22 이다. 그리고 ‘([])’의 값은 2×3=6 이므로 전체 괄호열의 값은 22 + 6 = 28

코드

n = input()
ans = 0 # 답
temp = 1 # 임시 값
st = [] # 괄호 저장
for i in range(len(n)):
    if n[i] == '(':
        st.append(n[i])
        temp *=2
    elif n[i] == ')':
        if len(st) == 0 or st[-1] == '[' :
            ans = 0
            break
        if n[i-1] == '(':
            ans += temp
        st.pop()
        temp//=2
    elif n[i] == '[':
        st.append(n[i])
        temp *=3
    elif n[i] == ']':
        if len(st) == 0 or st[-1] == '(' :
            ans = 0
            break
        if n[i-1] == '[':
            ans += temp
        st.pop()
        temp//=3

                
  
# 0이라면
if len(st) !=0:
    print(0)
else:    
    print(ans)
       

깨달은 점

if len(st) == 0 or st[-1] == '[' :
if len(st) == 0 or st[-1] == '(' :
위 처럼 먼저 스택의 비어있는지를 확인하고 그 다음의 st의 값을 확인해야된다.
만약
if st[-1] == '[' or len(st) == 0 :
if st[-1] == '(' or len(st) == 0 :
이처럼 할 시 백준 제출할 때 index오류가 발생한다.

  • 예전 정처기 문제를 풀면서 이런 식으로 if문의 순서로 장난치는게 있었는데, 이번 기회에 복기하게 되었다.
profile
안녕하세요

0개의 댓글