728x90

 

www.acmicpc.net/problem/2504

 

2504번: 괄호의 값

4개의 기호 ‘(’, ‘)’, ‘[’, ‘]’를 이용해서 만들어지는 괄호열 중에서 올바른 괄호열이란 다음과 같이 정의된다. 한 쌍의 괄호로만 이루어진 ‘()’와 ‘[]’는 올바른 괄호열이다.  만일

www.acmicpc.net

def checkBrankets(list):
    answer = False
    stack = []
    for i in list:
        if i == '(' or i == '[':
            stack.append(i)
        else:
            if not stack:
                return answer
            elif i == ')':
                if stack[-1] == '(':
                    stack = stack[:-1]
                else:
                    stack.append(i)
            else:
                if stack[-1] == '[':
                    stack = stack[:-1]
                else:
                    stack.append(i)
    if not stack:
        answer = True
    return answer


def judge(list):
    stack = []
    answer = 0
    for i in list:
        if i == '(' or i == '[':
            stack.append(i)
        else:
            if stack:
                if str(stack[-1]).isdigit() and str(stack[-2]).isdigit():
                    m = stack.pop()
                    n = stack.pop()
                    stack.append(m + n)
                if i == ')':
                    if str(stack[-1]).isdigit():
                        num = stack.pop()
                        stack.pop()
                        stack.append(num * 2)
                    else:
                        stack.pop()
                        stack.append(2)
                else:
                    if str(stack[-1]).isdigit():
                        num = stack.pop()
                        stack.pop()
                        stack.append(num * 3)
                    else:
                        stack.pop()
                        stack.append(3)
    return sum(stack)


n = input()
if checkBrankets(n) == False:
    print(0)
else:
    print(judge(n))

 

=> runtime error가 나온다.

 

def checkBrankets(list):
    answer = False
    stack = []
    for i in list:
        if i == '(' or i == '[':
            stack.append(i)
        else:
            if not stack:
                return answer
            elif i == ')':
                if stack[-1] == '(':
                    stack = stack[:-1]
                else:
                    stack.append(i)
            else:
                if stack[-1] == '[':
                    stack = stack[:-1]
                else:
                    stack.append(i)
    if not stack:
        answer = True
    return answer


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


n = input()
if checkBrankets(n) == False:
    print(0)
else:
    print(judge(n))

=> 아무래도 str(i).isdigit()의 문제가 아닐까 싶다.

728x90

+ Recent posts