[백준 BOJ_2504] 괄호의 값 Python 풀이

출처: 백준 온라인 저지

문제Permalink

image

풀이Permalink

stack을 이용해 모든 경우의 수를 체크해주었습니다. 설명은 아래의 코드에 달린 주석과 같습니다.

코드Permalink

str1 = input()
stack = []
num = 1
result = 0
for i in range(len(str1)):
    # 열린 괄호 때는 num에 해당 괄호의 수를 곱해주고 stack에 괄호를 넣어준다.
    if str1[i] == '(':
        num *= 2
        stack.append(str1[i])
    elif str1[i] == '[':
        num *= 3
        stack.append(str1[i])
    elif str1[i] == ')': # 닫힌 괄호 ')'
        # 열려있는 괄호가 없거나 마지막 열린괄호와 다를 때는 올바르지 않은 괄호열
        if not stack or stack[-1] == '[':
            result = 0
            break
        # 짝이 되는 열린괄호가 바로 직전에 있었다면 num을 더해준다.
        if str1[i-1] == '(':
            result += num
        # 괄호를 닫아줄 때는 해당 괄호의 수를 다시 나눠준다.
        num //= 2
        stack.pop()

    else: # 닫힌 괄호 ']'
        # 열려있는 괄호가 없거나 마지막 열린괄호와 다를 때는 올바르지 않은 괄호열
        if not stack or stack[-1] == '(':
            result = 0
            break
        # 짝이 되는 열린괄호가 바로 직전에 있었다면 num을 더해준다.
        if str1[i-1] == '[':
            result += num
        # 괄호를 닫아줄 때는 해당 괄호의 수를 다시 나눠준다.
        num //= 3
        stack.pop()
# 아직 닫히지않은 열린 괄호들이 남아있다면 올바르지 않은 괄호열
if stack:
  result = 0
print(result)

Leave a comment