์ด ๋ฌธ์ ๋ Stack ํด๋์ค๋ฅผ ์ด์ฉํด์ ํด๊ฒฐํ์๋ค.
ํฌ์ธํธ๋, ๋๋ ์ง ์ ๋ง๋๊ธฐ๋ฅผ ์ด๋ค ์กฐ๊ฑด์ผ ๋, ์ด๋ค ๊ฐ์ ๋ํด์ผํ๋์ง ํ์ ํ๋ ๊ฒ์ด๋ค.
์ฐจ๊ทผ์ฐจ๊ทผ ํ๋์ฉ ๊ทธ๋ ค๋ณด๋ฉด, ๋ฐ๋ก ์ดํด๊ฐ ๋๋ค.
์์ ๊ฐ์ ์ํฉ์ด ์๋ค๊ณ ๊ฐ์ ํ ๋,
'(' ๊ฐ ์์ผ๋ฉด ์คํ์ '(' ๋ฅผ ๊ณ์ push ํด์ฃผ๊ณ ')' ๊ฐ ๋์ฌ๋ pop์ ํด์ฃผ๊ณ ๋์ ์กฐ๊ฑด์ ๋ฐ์ ธ๋ด์ผ ํ๋ค.
์ฒซ ๋ฒ์งธ, ')' ๋ฅผ ๋ง๋ฌ๋ค. ๋ฐ๋ก ์ด์ ๋ฌธ์๊ฐ '(' ์ด๋ฏ๋ก ๋ ์ด์ ์์ ์ ์ ์๋ค.
๋ง์ฝ ')' ๋ฅผ ๋ง๋ฌ์ ๋, ์ด์ ๋ฌธ์๊ฐ ')' ๋ผ๋ฉด ๋ ์ด์ ๊ฐ ์๋ ๊ฒ์ด๋ค.
์๋ฌดํผ, ๋ ์ด์ ๊ฐ ๋ฐ์ฌ๋๊ณ , ๋จ์ ๋๊ฐ์ '(' ์ ๋์ ์ ์ ์์ง๋ง,
ํ์คํ ๊ฑด ํ์ฌ ์คํ์ ์ฌ์ด์ฆ ๋งํผ์ ์กฐ๊ฐ์ด ์๊ธด๋ค๋ ์ฌ์ค์ด๋ค.
์ฆ, result = result + stack.size(); ๊ฐ ์ฑ๋ฆฝํ๋ค.
๋ ')'๋ฅผ ๋ง๋ฌ๊ณ , ํ์ฌ 3๊ฐ์ '(' ๊ฐ ์๋ค.
์ญ์, 3๊ฐ์ ์ ๋ง๋๊ธฐ์ ๋์ ์ ์ ์์ง๋ง, ๋ ์ด์ ธ๊ฐ ๋ฐ์ฌ๋๋ฉด์ stack ์ฌ์ด์ฆ๋งํผ์ ์กฐ๊ฐ์ด ์ถ๊ฐ ๋จ์ ์ ์ ์๋ค.
๋ฐ๋ผ์ result = result + stack.size(); ๊ฐ ์ฑ๋ฆฝํ๋ค.
์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก result = result + stack.size(); ๊ฐ ์ฑ๋ฆฝํ๋ค.
์ ๊ฒฝ์ฐ๋, ')' ๋ฅผ ๋ง๋ฌ์ง๋ง, ์ด์ ๋ฌธ์๊ฐ ')' ์ด๋ฏ๋ก ๋ ์ด์ ๊ฐ ์๋๊ณ ์ ๋ง๋๊ธฐ์ ๋์์ ์ ์ ์๋ค.
๋ฐ๋ผ์ ์, ๋นจ๊ฐ์ ํ์์ ๊ฐ์ด, ์กฐ๊ฐ์ด 1๊ฐ๋ง ์ถ๊ฐ๊ฐ ๋๋ค.
๋ฐ๋ผ์ result = result +1 ; ์์ ์ ์ ์๋ค.
์ ๊ฒฝ์ฐ๋, ์ ๋ง๋๊ธฐ์ ๋์ด๊ธฐ ๋๋ฌธ์ ๋นจ๊ฐ์ ์กฐ๊ฐ์ด ํ๋ ์ถ๊ฐ ๋ ๊ฒ์ด๋ค.
๋ฐ๋ผ์ result = result +1 ; ์ด ๋ ๊ฒ์ด๋ค.
๋ง์ง๋ง ๊ฒฝ์ฐ, ์ญ์ ์ ๋ง๋๊ธฐ์ ๋์ ์๋ฏธํ๊ณ , ์กฐ๊ฐ์ ๊ฐฏ์๊ฐ +1์ด ๋ ๊ฒ์ด๋ค.
์ฆ.
1. '(' ์ธ ๊ฒฝ์ฐ ์คํ์ ๊ณ์ ์๋๋ค.
2. ')' ๋ฅผ ๋ง๋๊ฒฝ์ฐ
2-1. ์ด์ ๋ฌธ์๊ฐ '(' ๋ผ๋ฉด ๋ ์ด์ ธ์์ ์ ์ ์๊ณ , ๊ฒฐ๊ณผ๊ฐ์ stack.size() ๋ฅผ ๋ํ๋ค.
2-2. ์ด์ ๋ฌธ์๊ฐ ')' ๋ผ๋ฉด ๋ ์ด์ ธ๋ ์๋๊ณ , ์ ๋ง๋๊ธฐ์ ๋์ด ํ๋ ์์ฑ๋๋ฏ๋ก ๊ฒฐ๊ณผ๊ฐ์ 1์ ๋ํ๋ค.
์ ๋๊ฐ์ง ๊ท์น์ ๊ตฌํํ๋ฉด ๋๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
Stack<Character> stack = new Stack<>();
int result = 0;
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) == '(') {
stack.push('(');
}
if (input.charAt(i) == ')') {
if (input.charAt(i - 1) == '(') {
stack.pop();
result += stack.size();
} else {
stack.pop();
result += 1;
}
}
}
System.out.println(result);
}
}