eval(a+b) 같은 형식이고
exec(c= a+b) 같은 형식이다.
문제가 의도한게 이렇게 푸는 것이 아니란 것은 알지만 왠지 이렇게 하면 간단할 거 같아서 해봤다 ㅋㅋ
inp = input()
com = ""
result=0
stack = []
check2 = True # 올바른 식인지 체크
check = False # 덧셈넣을 타이밍 체크
for tmp in inp : # com 계산식 만들기
if tmp == "(" :
if check :
com+="+"
check=False
com += "2*("
stack.append(tmp)
elif tmp == "[" :
if check :
com+="+"
check=False
com+="3*("
stack.append(tmp)
elif tmp == ")" :
com+=")"
check=True
if not(stack) or "(" !=stack.pop() :
check2 = False
break
elif tmp == "]" :
com+=")"
check=True
if not(stack) or "[" !=stack.pop() :
check2 = False
break
else :
check2 = False
break
if stack :
check2 = False
# eval을 이용해 계산
if com and check2:
# com 에 () [] 처럼 무의미하게 붙어있는거 제거
com = com.replace("()", "1",com.count("()"))
com = com.replace("[]", "1",com.count("[]"))
result = eval(com)
print(result)
재귀, 스택이용
inp = input()
def func(inp) :
if len(inp) == 0 : # () 혹은 [] 을 1 취급
return 1
dic = { # 괄호 매칭
'(' : ')',
"[" : "]"
}
val, sub, stack = 0, '', [] # 값, 부분괄호열, 스택
for tmp in inp :
sub += tmp
# 괄호 뭉탱이 픽
if len(stack) > 0 and dic.get(stack[-1], '') == tmp: # 괄호체크
stack.pop()
else :
stack.append(tmp) # 괄호추가
if len(stack) == 0 :
n = 2 if sub[0] == '(' else 3 # 괄호에 해당하는 값
val+= func(sub[1:-1]) * n
sub = ''# 부분문자열 초기화
if len(stack) >0 : # 스택이 남아있으면 오류식 : 0
return 0
return val
print(func(inp))