자바에도 스택 클래스가 있으니 활용해서 풀 것
닫는 괄호를 만났을 때 인덱스 차이가 1일 경우에는 레이저에 더해주고 아닐 경우는 막대로 생각해주면 되는데..
다른 사람들이 훨씬 간단하게 풀어서 신기했다.
스택 사이즈만큼 답을 더해주고 나중에 막대가 끝날 때 1을 더해줘도 답이 나온다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int[] stack = new int[100000];
int[] laser = new int[100000];
int size = 0;
int laserSize = 0;
int cnt = 0;
for(int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '(') {
stack[size] = i;
size++;
} else if(c == ')') {
if(stack[size-1] == i-1){
laser[laserSize] = i-1;
laserSize++;
} else {
for(int j = 0; j < laserSize; j++) {
if(laser[j] > stack[size-1] && laser[j] < i){
cnt++;
}
}
cnt++;
}
stack[size-1] = 0;
size--;
}
}
System.out.println(cnt);
}
}