๋ฌธ์
์ ์ถ๋ ฅ ๋ฐ ์์
๋ฌธ์ ์ดํด ๋ฐ ์ ๊ทผ
์ด๋ฒ ๋ฌธ์ ๋ Stack์ ์ด์ฉํ์ฌ ํ์ด์ผํ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ๊ฐ ์ด๋ ต๊ฒ ๋ณด์ด์ง๋ง ๋จ์ํ๋ฅผ ์์ผ์ ๋ณธ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ๋ฌธ์ฅ์ผ๋ก ์ ๋ฆฌํ ์ ์๋ค.
๊ดํธ๊ฐ ()
์ฒ๋ผ ๋ถ์ด ์์ผ๋ฉด ๋ ์ด์ ธ์ด๊ณ , (...)
์ฒ๋ผ ์์ผ๋ฉด ๋ง๋๋ค. ๋ ์ด์ ธ๊ฐ ๋ง๋๋ฅผ ์๋ฅด๋๋ฐ ์๋ฆฐ ๋ง๋์ ๊ฐฏ์๋ ์ผ๋ง์ธ๊ฐ.
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด ์ธ ๊ฒฝ์ฐ๊ฐ ๋์จ๋ค.
- ( ๋ฌธ์๋ฅผ ๋ง๋ฌ์ ๊ฒฝ์ฐ
- ) ๋ฌธ์๋ฅผ ๋ง๋ฌ์ ๊ฒฝ์ฐ
- ๋ ์ด์ ธ๋ฅผ ๋ง๋ฌ์ ๊ฒฝ์ฐ
์ด ๊ฒฝ์ฐ์ ๋ฐ๋ผ ์์ค๋ง ์ง์ฃผ๋ฉด ๋!
( ๋ฌธ์๋ฅผ ๋ง๋ฌ์ ๊ฒฝ์ฐ
์ด ๋๋ ( ๋ก ์์ํ๋๊ฒ ๋ง๋์ผ์ง ๋ ์ด์ ธ์ผ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ผ๋จ ์คํ์ pushํ๊ณ ๋ค์์ ) ๋ฅผ ๋ง๋๋ฉด ํ์ธํ๋๋ก ํ๋ค.
Stack.push
๋ ์ด์ ธ๋ฅผ ๋ง๋ฌ์ ๊ฒฝ์ฐ
์ฌ๊ธฐ์ ๋ ์ด์ ธ๋ฅผ ๋ง๋ฌ๋์ง ์๋์ง ํ๋ณ์ ํ๊ธฐ ์ํด์ ํ ์นธ ์์ ๋ฌธ์๋ฅผ ํ์ธํด์ ( ๋ฅผ ๋ง๋ฌ์ผ๋ฉด ๋ ์ด์ ธ๋ก ๊ฐ์ฃผํ๊ณ Stack.pop ์ฐ์ฐ์ ์ํํ๋ค.
๋ ์ด์ ธ๋ฅผ ๋ง๋ฌ๋ค๋ ์๋ฆฌ๋ ๋ง๋๊ฐ ์๋ ธ๋ค๋ ์๋ฆฌ์ ๊ฐ์ผ๋๊น ํ์ฌ ์คํ์ ๋ค์ด์๋ ( ์ ๋งํผ ์๋ฆฐ ๋ง๋ ํฉ๊ณ(ans)์ Stack.size()๋งํผ ๋ํด์ค๋ค.
) ๋ฌธ์๋ฅผ ๋ง๋ฌ์ ๊ฒฝ์ฐ
์ด ๊ฒฝ์ฐ์๋ ๋ฐ๋ก Stack.pop ์ฐ์ฐ์ผ๋ก ์คํ์ ์์ ์ฃผ๋ฉด ๋๋ค. ํ์ง๋ง ๋ช ์ฌํด์ผ ํ ์ ์ด Stack์์ pop์ ํ์๋ค๊ณ ํด๋, ์ ๋ง๋๊ธฐ์ ์๋ฆฐ ๋ถ๋ถ์ด ๋จ์์์ผ๋ฏ๋ก ์๋ฆฐ ๋ง๋ ํฉ๊ณ(ans)์ +1 ์ ํด์ค๋ค.
์์ค ์ฝ๋
import java.io.BufferedReader;
import java.io.BufferedWriter;
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 stick = br.readLine();
Stack<Character> stack = new Stack<>();
int ans = 0;
for (int i = 0; i < stick.length(); i++) {
if(stick.charAt(i) == '('){
stack.push('(');
}else {
if(stick.charAt(i-1) == '(') { // ๋ ์ด์ ธ์ธ ๊ฒฝ์ฐ
stack.pop();
ans += stack.size();
}else {
ans += 1;
stack.pop();
}
}
}
System.out.println(ans);
}
}
๋๊ธ