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

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

오타

면접 대비

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

요약
오타가 많아야 하나인 괄호 문자열이 주어질 때, 문자 하나를 뒤집어 올바른 괄호 문자열로 만드는 위치의 수를 센다.
난이도

보통10점 중 5점

유형
문자열, 구현, 누적 합, 그리디
정답자
아직 제출이 없습니다

문제

올바른 괄호 문자열을 좋아하는 키파는 최근에 노트북을 샀다. 그런데 키보드가 너무 작아서, 키파는 여는 괄호 ( 와 닫는 괄호 ) 를 실수로 뒤바꿔 입력하지는 않았을까 걱정되었다. 키파는 매우 조심해서 입력했기 때문에, 오타는 많아야 한 곳에서만 났다.

키파가 입력한 괄호 문자열이 주어질 때, 문자 하나만 바꿔서(여는 괄호를 닫는 괄호로, 또는 닫는 괄호를 여는 괄호로) 전체를 올바른 괄호 문자열로 만들 수 있는 서로 다른 위치가 몇 개인지 세어 키파를 도와주자.

올바른 괄호 문자열은 다음과 같이 정의된다.

  • () 는 올바른 괄호 문자열이다.
  • 문자열 A 가 올바른 괄호 문자열이면 (A) 도 올바른 괄호 문자열이다.
  • 문자열 A 와 B 가 모두 올바른 괄호 문자열이면, 이를 이어 붙인 AB 도 올바른 괄호 문자열이다.

입력

첫째 줄에 키파가 입력한 괄호 문자열이 주어진다. 문자열은 ( 와 ) 로만 이루어져 있으며, 길이 nn 은 1≤n≤1000001 \le n \le 100000 을 만족한다.

출력

정확히 한 문자만 바꿔서 올바른 괄호 문자열로 만들 수 있는 위치의 개수를 첫째 줄에 출력한다. 그런 위치가 없으면 0 을 출력한다.

힌트

키파가 입력한 문자열 ()(()))) 를 살펴보자. 각 문자의 위치는 다음과 같다.

위치: 1 2 3 4 5 6 7 8
문자: ( ) ( ( ) ) ) )

22 번째 문자 ) 를 ( 로 바꾸면 올바른 괄호 문자열 (((()))) 가 된다. 같은 방법으로 55 번째, 66 번째, 77 번째 문자를 각각 바꿔도 올바른 괄호 문자열을 만들 수 있으므로, 답은 44 이다.

예제1

  1. 예제 1

    입력
    ()(())))
    
    예상 출력
    4