백준 2504번 괄호의 값

highway92·2021년 9월 24일
0

백준

목록 보기
7/27

문제출처 : https://www.acmicpc.net/problem/2504

풀이과정

1. check 함수를 만들어 괄호가 유효한지 체크한다.

2. check 함수를 통과했다면 solve 함수를 통해 값을 계산한다.

2-1. 괄호의 값을 계산하기 위해 stack 자료구조를 사용했다.

2-2. for 문을 돌면서 ( , [ 값일 경우 stack 에 append 한다.

2-3. ")"을 만나게 되면 두 가지 경우로 나눠진다.

2-3-1. stack[-1] 값이 ")"일 경우 stack[-1] = 2를 한다.
2-3-2. 그 이외의 값일 경우 "("가 나타 날때 까지 temp 값에 숫자를 더해준다.
"("가 나타나면 스택에서 제거해주고 temp*2값을 stack에 append 한다.

3. return sum(stack)

def check(s):
    stack=[]
    for i in s:
        if i == "(" or i == "[":
            stack.append(i)
        elif i == ")":
            if not stack:
                return False
            elif stack[-1] == "(":
                stack.pop()
            else:
                stack.append(i)
        elif i == "]":
            if not stack:
                return False
            elif stack[-1] == "[":
                stack.pop()
            else:
                stack.append(i)
    if len(stack) > 0:
        return False
    else:
        return True

def solve(s):
    stack = []
    for i in s:
        if i == "(" or i =="[":
            stack.append(i)
        elif i == ")":
            if stack[-1] == "(":
                stack[-1] = 2
            else: 
            # "(" 값을 찾을 때 까지 temp 에 값을 저장하고 temp*2를 append 해준다. 
            # check함수에서 확인했기에 오류는 걱정하지 않도록 하자.
                temp = 0
                while stack:
                    if stack[-1] == "(":
                        stack.pop()
                        break
                    else:
                        temp += stack.pop()
                stack.append(temp*2)
        elif i == "]":
            if stack[-1] == "[":
                stack[-1] = 3
            else:
                temp = 0
                while stack:
                    if stack[-1] == "[":
                        stack.pop()
                        break
                    else:
                        temp += stack.pop()
                stack.append(temp*3)
    return print(sum(stack))



s = input()

if check(s) == False:
    print(0)
else:
    solve(list(s))
profile
웹 개발자로 활동하고 있습니다.

0개의 댓글