import java.util.*;
class Main {
public int solution(String str) {
int answer = 0;
char bf = ' ';
Stack<Character> stack = new Stack<>();
for(char x : str.toCharArray()) {
if(x == '(') {
bf = x;
stack.push(x);
}
//x= 닫는괄호
else {
//lazer
if(bf == '(') {
bf = x;
stack.pop();
answer+=stack.size();
}
//쇠막대기 끝
else {
stack.pop();
answer += 1;
}
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
import java.util.*;
class Main {
public int solution(String str) {
int answer = 0;
char bf = ' ';
Stack<Character> stack = new Stack<>();
for(int i=0; i<str.length(); i++) {
if(str.charAt(i) == '(') stack.push(str.charAt(i));
//x= 닫는괄호
else {
stack.pop();
//lazer
if(str.charAt(i-1) == '(') answer+=stack.size();
//쇠막대기 끝
else answer++;
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.println(T.solution(str));
}
}
여는괄호'(' 를 만나면 무조건 stack에 넣고,
닫는괄호')' 를 만나면 바로 전 문자와 비교해,
바로 전 문자가 '('면 레이저이므로 stack에서 한개를 pop하고 남은 stack의 size만큼 answer에 더해주면된다.
바로 전 문자가 ')'면 쇠막대기의 끝부분이므로 answer에 +1만 해주면된다.
++ 개인적으로 index를 사용한편이 훨씬 낫다고 본다...
이전값을 계속 저장해줘야하는 귀찮음이 있기때문에..
이런 풀이방법은 들으면 간단하지만 생각해 낼수있냐 없냐가 실력의 차이라고 생각한다.
괄호를 이용한 문제는 대부분 stack을 이용한다고 생각하자!