동시에 균형을 이루는 괄호 문자열
시간 제한1초메모리 제한128 MB
길이 N인 K개의 괄호 문자열이 주어질 때, 모든 문자열에서 동시에 올바른 괄호열이 되는 부분 구간의 개수를 센다.
문제
길이가 모두 인 괄호 문자열 개가 주어진다 (, ). 각 문자열을 라 하고, 각 문자열의 문자는 번부터 번까지 번호가 매겨져 있다.
구간 ()가 동시에 균형을 이룬다는 것은, 모든 문자열 에 대해 위치 부터 까지의 부분 문자열이 각각 균형 잡힌 괄호 문자열임을 뜻한다.
예를 들어 이고 문자열이 다음과 같다고 하자.
S_1 = )()((())))(())
S_2 = ()(()()()((())
S_3 = )))(()()))(())
1111
01234567890123
이때 구간 은 동시에 균형을 이룬다. , , 가 모두 균형 잡힌 문자열이기 때문이다. 구간 과 역시 동시에 균형을 이룬다.
구간 가 동시에 균형을 이루는 쌍 의 개수를 세어라.
괄호 문자열이 균형 잡혀 있다는 것은, (와 )의 개수가 같고 모든 접두사에서 (의 개수가 )의 개수 이상임을 뜻한다. 예를 들어 다음 문자열들은 균형 잡혀 있다.
()(())()(()())
반면 다음 문자열들은 그렇지 않다.
)(())(((())))
입력
- 첫째 줄: 두 정수 와 .
- 둘째 줄부터 번째 줄까지: 각 줄에 길이 인 괄호 문자열이 하나씩 주어진다.
출력
- 동시에 균형을 이루는 구간 의 개수를 정수 하나로 출력한다.