백준2504(파이썬) - 괄호의 값

resilient

·

2021. 6. 9. 13:08

728x90
반응형

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

 

2504번: 괄호의 값

4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다.  만일

www.acmicpc.net

  • 괄호 특성상 짝이 맞아야하는데 순서가 상관없기 때문에 괄호문제가 나오면 거의 스택을 사용한 문제이다. 
  • 스택에 앞괄호( (,{,[ ) 를 넣어놓고 하나씩 pop() 함수를 이용해서 뒤에서 부터 꺼낸다음 '뒷괄호( ),},] ) 가 나오게 되면' 이라는 논리로 풀어야한다.
  • 이 문제는 뒷괄호가 나와서 앞괄호와 짝을 이루게 되면 -> 숫자 계산이 이루어진다. 어렵게 생각하지말고 괄호가 모두 짝이 맞았을 때끼리 더해주고, 아니면 () 로 이루어지면 2, [] 로 이루어지면 3을 곱한다고 생각해 주면된다.
import sys
input = sys.stdin.readline

# \n를 빼주기 위해서 restrip() 을 사용
data = list(input().rstrip())

stack = []

for i in data:
    if i ==')':
        flag = 0
        while len(stack)>0:
            compare_pop = stack.pop()
            if compare_pop == '(':
                # 바로 옆에 ( 가 있을 때
                if flag == 0:
                    stack.append(2)
                else:
                    stack.append(2*flag)
                # 짝을 한번 찾으면  break로 while문 빠져나가준다.
                break
            # 잘못된 괄호열
            elif compare_pop == '[':
                print(0)
                # 인자값이 0이 들어가면 종료해준다.
                exit(0)
            #숫자면
            else:
                flag += compare_pop
    elif i ==']':
        flag = 0
        while len(stack)>0:
            compare_pop = stack.pop()
            if compare_pop == '[':
                # 바로 옆에 [ 가 있을 때
                if flag == 0:
                    stack.append(3)
                else:
                    stack.append(3*flag)
                # 짝을 한번 찾으면 break로 while문 빠져나가준다.
                break
            # 잘못된 괄호열
            elif compare_pop == '(':
                print(0)
                # 인자값이 0이 들어가면 종료해준다.
                exit(0)
            #숫자면
            else:
                flag += compare_pop
    
    else:
        stack.append(i)

result = 0
for i in stack:
    # 아직도 괄호가 하나라도 남아 있으면 잘못된 괄호열
    if i == '(' or i == '[':
        print(0)
        # 인자값이 0이 들어가면 종료해준다.
        exit(0)
    else:
        result += i
print(result)
반응형