괄호의 값

면접 대비

시간 제한1초메모리 제한128 MB

요약
두 종류의 괄호로 이루어진 문자열이 유효한지 판별하고, 유효하면 정의된 규칙대로 값을 계산해서 출력합니다.
난이도

보통10점 중 4점

유형
스택, 문자열, 재귀
정답자
아직 제출이 없습니다

문제

괄호열은 네 문자 (, ), [, ]만으로 이루어진 문자열이다. 올바른 괄호열은 다음과 같이 정의한다.

  1. 한 쌍의 괄호만으로 이루어진 ()와 []는 올바른 괄호열이다.
  2. X가 올바른 괄호열이면 (X)와 [X]도 올바른 괄호열이다.
  3. X와 Y가 모두 올바른 괄호열이면, 두 문자열을 이어 붙인 XY도 올바른 괄호열이다.

올바른 괄호열 X의 값은 다음 규칙으로 정한다.

  1. ()의 값은 2이다.
  2. []의 값은 3이다.
  3. (X)의 값은 2 × value(X)이다.
  4. [X]의 값은 3 × value(X)이다.
  5. 올바른 괄호열 X와 Y를 이어 붙인 XY의 값은 value(XY) = value(X) + value(Y)이다.

예를 들어 (()[[]])의 안쪽 ()[[]]의 값은 2 + 3 × 3 = 11이므로 (()[[]])의 값은 2 × 11 = 22이다. 또 ([])의 값은 2 × 3 = 6이므로 (()[[]])([]) 전체의 값은 22 + 6 = 28이다.

주어진 괄호열을 읽고 위 규칙에 따라 값을 계산해 출력하라. 올바른 괄호열이 아니면 0을 출력해야 한다.

입력

첫째 줄에 괄호열을 나타내는 문자열이 주어진다. 문자열의 길이는 1 이상 30 이하이다.

출력

괄호열의 값을 나타내는 정수 하나를 출력한다. 입력이 올바른 괄호열이 아니면 0을 출력한다.

예제2

  1. 예제 1

    입력
    (()[[]])([])
    
    예상 출력
    28
    
  2. 예제 2

    입력
    [][]((])
    
    예상 출력
    0