[BOJ]2504かっこの値


2504かっこの値
  • 在貴
  • import sys
    input = sys.stdin.readline
    
    s = list(input().rstrip())[::-1]
    
    def cal(start):
        r = 0
        while s:
            a = s.pop()
            if a == "(" or a == "[":
                r += cal(a) # 다음 괄호를 입력받아 처리한다.
            elif start == "(" and a == ")":
                return 2 * max(1,r)
            elif start == "[" and a == "]":
                return 3 * max(1,r)
        
        # 리스트가 비었는데 최종 return 하지 못했다는 것은 괄호에 문제가 있음을 의미
        print(0)
        sys.exit()
    
    ans = 0    
    while s:
        ans += cal(s.pop())
    print(ans)
  • スタック
  • bracket = list(input())
    
    stack = []
    answer = 0
    tmp = 1
    
    for i in range(len(bracket)):
    
        if bracket[i] == "(":
            stack.append(bracket[i])
            tmp *= 2
    
        elif bracket[i] == "[":
            stack.append(bracket[i])
            tmp *= 3
    
        elif bracket[i] == ")":
            if not stack or stack[-1] == "[":
                answer = 0
                break
            if bracket[i-1] == "(":
                answer += tmp
            stack.pop()
            tmp //= 2
    
        else:
            if not stack or stack[-1] == "(":
                answer = 0
                break
            if bracket[i-1] == "[":
                answer += tmp
    
            stack.pop()
            tmp //= 3
    
    if stack:
        print(0)
    else:
        print(answer)
  • かっこを開く
  • スタック
  • (開くと2、[開くと3を掛ける.
  • )
  • 括弧を閉じる
  • スタックからtopを取り出してペアリングする
  • エラーの場合0出力
  • 値の保存
  • 前かっこペアの場合に乗算!
  • 対応する値/nは、元の値を返します.
  • [注意]
  • https://my-coding-notes.tistory.com/343
  • https://hongcoding.tistory.com/114
  • 22.2.3