코테 공부

백준[2504] 괄호의 값 (파이썬 풀이)

moonsun623 2021. 10. 6. 01:49
반응형

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

 

2504번: 괄호의 값

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

www.acmicpc.net

 

내가 한 풀이

inputs=list(str(input()))
stack=[]
total=0

for i in range (len(inputs)):
    now=inputs[i]
            
    if now==')':
        tmp=0
        if len(stack)==0:
            print(0)
            exit(0)
        while stack:
            x=stack.pop()
            if x=='(':
                if tmp==0:
                    stack.append(2)
                else:
                    stack.append(2*tmp)
                break
            elif x=='[':
                print("0")
                exit (0)
            else:
                tmp=tmp+int(x)
    elif now==']':
        tmp=0
        if len(stack)==0:
            print(0)
            exit(0)
        while stack:
            x=stack.pop()
            if x=='[':
                if tmp==0:
                    stack.append(3)
                else:
                    stack.append(3*tmp)
                break
            elif x=='(':
                print("0")
                exit(0) 
            else:
                tmp=tmp+int(x)
    else:
        stack.append(inputs[i])
            
for i in stack:
    if i=='(' or i=='[':
        print("0")
        exit(0)
    else:
        total+=i
print(total)

입력값 리스트를 for문을 돌려

case 1. 현재 값이 ) 인경우

        stack의 마지막 값이  (  일 때까지 pop을 해준다. 이 때 tmp 변수를 사용하여 () 사이 다른 연산값을 더 한 뒤 맞는 괄호가 나왔을때 tmp값과 2를 곱해 stack에 넣어준다.

 

case 2. 현재 값이 ] 인경우

        stack의 마지막 값이  [  일 때까지 pop을 해준다. 이 때 tmp 변수를 사용하여 [] 사이 다른 연산값을 더 한 뒤 맞는 괄호가 나왔을때 tmp값과 3를 곱해 stack에 넣어준다.

 

ex) 

inputs=['(','(,')',')]

현재 i=2

stack=['(','(']

now=')'

tmp=0 이기 때문에 ()연산에 맞는 2를 stack에 append

stack=['(',2]

 

현재 i=3

stack=['(',2]

now=')'

stack의 마지막 값이 괄호가 아닌 숫자이기 때문에 tmp에 2를 더해준다.

tmp=2

stack=['(']

tmp=2이기 때문에 2* 2( ()연산 값)=4을 stack에 append

stack=[2*2]