현욱은 괄호왕이야!!
면접 대비시간 제한2초메모리 제한512 MB
괄호 문자열이 주어질 때, 올바른 괄호 문자열이 되는 가장 긴 연속 부분 문자열의 길이를 구한다.
문제
여는 괄호 '('와 닫는 괄호 ')'로 이루어진 문자열 가운데 다음 조건을 만족하는 문자열을 올바른 괄호 문자열이라고 부른다.
- ()는 올바른 괄호 문자열이다.
- 어떤 문자열 x가 올바른 괄호 문자열이면 (x)도 올바른 괄호 문자열이다.
- 어떤 문자열 x와 y가 올바른 괄호 문자열이면 xy도 올바른 괄호 문자열이다.
현욱이는 친구에게 생일 선물로 아주 긴 괄호 문자열을 받았다(대체 왜 이런 걸 선물한 걸까?). 하지만 현욱이는 올바른 괄호 문자열이 아니면 몹시 싫어하기 때문에, 받은 문자열에서 연속한 일부분을 잘라 올바른 괄호 문자열을 만들려고 한다. 이왕이면 긴 것이 좋으니 현욱이는 부분 구간을 최대한 길게 잘라내려고 한다. 현욱이를 도와 주어진 괄호 문자열에서 위 조건을 만족하는 가장 긴 부분 문자열의 길이를 구하는 프로그램을 작성해 보자.
입력
첫 줄에 문자열의 길이 n (1 ≤ n ≤ 200,000)이 주어진다.
둘째 줄에 괄호로만 이루어진 길이 n짜리 문자열이 주어진다.
출력
주어진 문자열에서 길이가 가장 길면서 올바른 괄호 문자열인 부분 문자열의 길이를 출력한다. 올바른 괄호 문자열인 부분 문자열을 찾을 수 없으면 0을 출력한다.
힌트
첫 번째 입출력에서 맨 처음 위치부터 4개를 잘라낸 (())가 가장 긴 올바른 괄호 문자열이다.
두 번째 입출력에서 6번째 위치부터 8개를 잘라낸 ()((()))가 가장 긴 올바른 괄호 문자열이다.