백준 문제 풀이
백준 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. 계산
이 순서로 진행됩니다.
위 출력은 스택을 매번 출력하도록 한 결과입니다.
저런식으로 구현해주시면 됩니다.^^
반응형