황소개발자

백준 2504 파이썬 python : 괄호의 값 @@황소처럼 우직하게@@ 원리를 알면 참 재밌는 문제 본문

백준 문제 풀이

백준 2504 파이썬 python : 괄호의 값 @@황소처럼 우직하게@@ 원리를 알면 참 재밌는 문제

hjp845 2020. 2. 26. 05:02
반응형
import sys
input = sys.stdin.readline

brackets = input().strip()

def check_brakcets(ss):
    stack = []
    for s in ss:
        if s == '(' or s == '[':
            stack.append(s)
        elif s == ')' and stack:
            if stack[-1] == '(':
                stack = stack[:-1]
            else:
                stack.append(s)
        elif s == ']' and stack:
            if stack[-1] == '[':
                stack = stack[:-1]
            else:
                stack.append(s)
        else:
            stack.append(s)
    if stack:
        return False
    else:
        return True

def sol(ss):
    stack = []
    for s in ss:
        if s == '(' or s == '[':
            stack.append(s)
        elif s == ')':
            if stack[-1] == '(':
                stack[-1] = 2
            else:
                tmp = 0
                for i in range(len(stack) - 1, -1, -1):
                    if stack[i] == '(':
                        stack[-1] = tmp * 2
                        break
                    else:
                        tmp += stack[i]
                        stack = stack[:-1]
        elif s == ']':
            if stack[-1] == '[':
                stack[-1] = 3
            else:
                tmp = 0
                for i in range(len(stack) - 1, -1, -1):
                    if stack[i] == '[':
                        stack[-1] = tmp * 3
                        break
                    else:
                        tmp += stack[i]
                        stack = stack[:-1]
    return sum(stack)

if check_brakcets(brackets) == False:
    print(0)
else:
    print(sol(brackets))

제가 괄호문제에 트라우마가 있었는데, 원리를 알고나니 참 쉽네요

바로 '스택' 입니다.. 스택 문제라는 것만 알았어도 풀었을텐데 작년코테 ㅠㅠ

왜 스택이라고 생각못했을까 반성합니다.

우선 문제풀이는

1. 일단 올바른 괄호가 맞는가?

2. 계산

이 순서로 진행됩니다.

스택

위 출력은 스택을 매번 출력하도록 한 결과입니다.

저런식으로 구현해주시면 됩니다.^^

반응형
Comments