(실버2)2504 괄호의 값

‍한승운·2021년 2월 25일
0

1. eval을 이용한 나의 풀이

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) 

2. 정상적인 풀이

재귀, 스택이용

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))
profile
함께 성장하고 싶은 백엔드 개발자

0개의 댓글

관련 채용 정보