아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

괄호 편집기

시간 제한2초메모리 제한512 MB

요약
여는 괄호, 닫는 괄호, 백스페이스 명령을 하나씩 처리할 때마다 현재 텍스트에 있는 균형 잡힌 부분 문자열의 개수를 출력한다.
난이도

보통10점 중 7점

유형
스택, 동적 계획법, 문자열, 구현
정답자
아직 제출이 없습니다

문제

여는 괄호와 닫는 괄호로만 이루어진 텍스트를 다루는 독특한 편집기를 사용한다. 편집기는 다음 세 키를 편집 명령으로 받아, 안에 있는 텍스트를 바꾼다.

  • ‘(’는 텍스트 끝에 여는 괄호(‘(’)를 덧붙인다.
  • ‘)’는 텍스트 끝에 닫는 괄호(‘)’)를 덧붙인다.
  • ‘-’는 텍스트의 마지막 문자를 지운다.

균형 문자열은 다음 중 하나이다.

  • “()”
  • “(X)”, 여기서 X는 균형 문자열이다.
  • “XY ”, 여기서 X와 Y는 모두 균형 문자열이다.

처음에 편집기는 빈 텍스트를 담고 있다. 각 키 명령을 입력한 뒤 편집기에 담긴 텍스트에 있는 균형 부분 문자열의 개수에 관심이 있다. 같은 균형 부분 문자열이 두 번 이상 나타나면 각각 따로 세야 한다. 또한 어떤 균형 부분 문자열이 다른 균형 부분 문자열 안에 있으면 안쪽과 바깥쪽을 모두 세야 한다.

입력

입력은 한 줄로 주어지며, 각 문자가 편집기에 대한 명령 키, 즉 ‘(’, ‘)’, ‘-’ 중 하나인 문자열을 담는다. 문자의 개수는 200 000을 넘지 않는다. 이 문자들은 편집기에 대한 키 입력 순서를 나타낸다.

텍스트가 비어 있을 때 ‘-’ 명령이 오지 않음이 보장된다.

출력

각 키 명령이 적용된 뒤 편집기에 담긴 텍스트의 균형 부분 문자열 개수를 한 줄에 하나씩 출력한다. 따라서 출력 줄 수는 입력 줄의 문자 수와 같아야 한다.

예제2

  1. 예제 1

    입력
    (()())---)
    
    예상 출력
    0
    0
    1
    1
    3
    4
    3
    1
    1
    2
    
  2. 예제 2

    입력
    ()--()()----)(()()))
    
    예상 출력
    0
    1
    0
    0
    0
    1
    1
    3
    1
    1
    0
    0
    0
    0
    0
    1
    1
    3
    4
    4