()[]
다음 사항을 만족 하는 네 개의 문자열로 구성된 프로그램을 작성하십시오 .
- 모든 왼쪽 괄호
(
에는 일치하는 오른쪽 괄호가)
있습니다. - 모든 왼쪽 브래킷
[
에는 일치하는 오른쪽 브래킷이]
있습니다. - 일치하는 괄호와 괄호 쌍은 겹치지 않습니다. 예를 들어
[(])
, 일치하는 괄호가 일치하는 괄호 안에 완전히 포함되지 않았거나 그 반대이기 때문에 유효하지 않습니다. - 첫 문자와 마지막 문자는 일치하는 괄호 또는 괄호 쌍입니다. 그래서
([]([]))
하고는[[]([])]
유효하지만,[]([])
하지 않습니다.
( 입력 형식 의 문법 은 <input> ::= [<input>*] | (<input>*)
입니다.)
일치하는 괄호와 대괄호 쌍은 음이 아닌 정수로 평가됩니다.
- 일치하는 괄호 안에있는 쌍의 값은 모두 합산 됩니다. 빈 일치
()
값은 value0
입니다. - 일치하는 대괄호 안에있는 쌍의 값은 모두 곱해 집니다. 빈 일치
[]
값은 value1
입니다.
예를 들어, ([](())([][])[()][([[][]][][])([][])])
분류하고 다음과 같이 평가할 수 있습니다 9
.
([](())([][])[()][([[][]][][])([][])]) <input>
(1 (0 )(1 1 )[0 ][([1 1 ]1 1 )(1 1 )]) <handle empty matches>
(1 0 2 0 [(1 1 1 )2 ]) <next level of matches>
(1 0 2 0 [3 2 ]) <and the next>
(1 0 2 0 6 ) <and the next>
9 <final value to output>
또 다른 예:
[([][][][][])([][][])([][][])(((((([][]))))))] <input>
[(1 1 1 1 1 )(1 1 1 )(1 1 1 )((((((1 1 ))))))]
[5 3 3 (((((2 )))))]
[5 3 3 ((((2 ))))]
[5 3 3 (((2 )))]
[5 3 3 ((2 ))]
[5 3 3 (2 )]
[5 3 3 2 ]
90 <output>
프로그램은 전체 입력 문자열로 표시되는 정수를 평가하고 인쇄해야합니다. 입력이 유효하다고 가정 할 수 있습니다. 바이트 단위의 가장 짧은 코드가 이깁니다.
프로그램 대신 문자열을 받아서 정수를 인쇄하거나 반환하는 함수를 작성할 수 있습니다.