알고리즘
스택이 비어있으면 안됨( -1값 추가 해놓기 )
( -1인 이유는 ')'괄호가 홀수에 오기 때문에 )
'(' 가 오면 괄호의 번호를 스택에 저장하고
')' 가 오면 스택에서 '(' 를 pop한다.
pop으로 인해 스택이 비어있다면 '(' 가 없었던 것이므로
현재 ')' 의 번호를 스택에 저장한다.
결과값에 현재 저장된 결과값과 지금 나온 제대로된 괄호의 길이중 더 긴것을 결과값에 저장한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
String str = br.readLine();
Stack<Integer> s = new Stack<Integer>();
int result=0;
s.push(-1); // 스택이 비어있으면 안됨
for (int i =0; i< num; i++) { //입력 받을 괄호 개수 만큼 반복
if(str.charAt(i) == '(') { // 열린 괄호 일때
s.push(i); // 스택에 현재 번호 추가
}else { // 닫힌 괄호 일때
s.pop(); //열린 괄호 제거
if(s.empty()) { //스택이 비어있을 시
s.push(i); // 현재 번호 스택에 추가
}
result = Math.max(result,i-s.peek()); // 결과값이랑 제대로된 괄호 개수를 비교하여 더큰값을 결과값에 넣기
}
}
System.out.println(result); // 결과값 출력
}
}
'코딩테스트' 카테고리의 다른 글
백준 A와 B(12904번) (0) | 2022.08.31 |
---|---|
백준 카드 정렬하기(1715번) (0) | 2022.08.31 |
백준 스카이라인(1863번) (0) | 2022.08.30 |
백준 탑(2493번) (0) | 2022.08.29 |
백준 옥상 정원 꾸미기(6198번) (0) | 2022.08.29 |