괄호 편집기
시간 제한2초메모리 제한512 MB
여는 괄호, 닫는 괄호, 백스페이스 명령을 하나씩 처리할 때마다 현재 텍스트에 있는 균형 잡힌 부분 문자열의 개수를 출력한다.
문제
여는 괄호와 닫는 괄호로만 이루어진 텍스트를 다루는 독특한 편집기를 사용한다. 편집기는 다음 세 키를 편집 명령으로 받아, 안에 있는 텍스트를 바꾼다.
- ‘(’는 텍스트 끝에 여는 괄호(‘(’)를 덧붙인다.
- ‘)’는 텍스트 끝에 닫는 괄호(‘)’)를 덧붙인다.
- ‘-’는 텍스트의 마지막 문자를 지운다.
균형 문자열은 다음 중 하나이다.
- “()”
- “(X)”, 여기서 X는 균형 문자열이다.
- “XY ”, 여기서 X와 Y는 모두 균형 문자열이다.
처음에 편집기는 빈 텍스트를 담고 있다. 각 키 명령을 입력한 뒤 편집기에 담긴 텍스트에 있는 균형 부분 문자열의 개수에 관심이 있다. 같은 균형 부분 문자열이 두 번 이상 나타나면 각각 따로 세야 한다. 또한 어떤 균형 부분 문자열이 다른 균형 부분 문자열 안에 있으면 안쪽과 바깥쪽을 모두 세야 한다.
입력
입력은 한 줄로 주어지며, 각 문자가 편집기에 대한 명령 키, 즉 ‘(’, ‘)’, ‘-’ 중 하나인 문자열을 담는다. 문자의 개수는 200 000을 넘지 않는다. 이 문자들은 편집기에 대한 키 입력 순서를 나타낸다.
텍스트가 비어 있을 때 ‘-’ 명령이 오지 않음이 보장된다.
출력
각 키 명령이 적용된 뒤 편집기에 담긴 텍스트의 균형 부분 문자열 개수를 한 줄에 하나씩 출력한다. 따라서 출력 줄 수는 입력 줄의 문자 수와 같아야 한다.