소를 찾아라

면접 대비

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

요약
괄호 문자열에서 x에서 "(("가 시작하고 y에서 "))"가 시작하며 x < y인 순서쌍 (x, y)의 개수를 센다.
난이도

쉬움10점 중 3점

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

문제

천방지축 베시(소, 1세)가 외양간을 탈출해 풀로 뒤덮인 산등성이에 숨었다. 농부 존은 온 풀숲을 샅샅이 뒤졌지만 베시를 찾지 못했다. 존의 눈에는 그 풀밭이 NN개의 소괄호로 이루어진 문자열처럼 보였기 때문이다. 예를 들면 다음과 같다.

)((()())())

존은 베시의 두 뒷다리가 서로 붙어 있는 왼쪽 소괄호 두 개 (( 와 똑같이 생겼고, 두 앞다리가 서로 붙어 있는 오른쪽 소괄호 두 개 )) 와 똑같이 생겼다는 것을 안다. 문자열에서 (( 가 시작하는 위치(인덱스)를 xx, )) 가 시작하는 위치(인덱스)를 yy라 할 때, 베시가 서 있는 자리는 x<yx < y인 순서쌍 (x,y)(x, y)로 나타낼 수 있다.

베시가 서 있을 수 있는 서로 다른 순서쌍 (x,y)(x, y)의 개수를 구해 존을 도와주자.

입력

첫째 줄에 소괄호로만 이루어진 길이 NN의 문자열이 주어진다. (1≤N≤50,0001 \le N \le 50{,}000)

출력

첫째 줄에 베시가 서 있을 수 있는 자리의 개수를 출력한다. 즉, (( 가 시작하는 인덱스 xx와 )) 가 시작하는 인덱스 yy에 대해 x<yx < y인 서로 다른 순서쌍 (x,y)(x, y)의 개수를 출력한다.

힌트

예를 들어 문자열 )((()())()) 에서 (( 는 인덱스 1과 2에서 시작하고, )) 는 인덱스 6과 9에서 시작한다(0부터 셈). 모든 (( 가 모든 )) 보다 앞에 있으므로 만들 수 있는 순서쌍은 2×2=42 \times 2 = 4개다.

예제2

  1. 예제 1

    입력
    )((()())())
    
    예상 출력
    4
    
  2. 예제 2

    입력
    (())
    
    예상 출력
    1