문제 보면 정신이 어지러운데 결론은 () 가 나오면 자른다는 거고 (가 나오면 쌓기 시작하고 )가 나오면 빼게 되는데, ((( 이후 () 가 나오면 3개가 쌓이는 식이고 레이저 이후 )가 나오면 +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 s = br.readLine();
Stack<String> stack = new Stack<>();
int ans = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == '(') {
stack.push("(");
} else {
stack.pop();
if (s.charAt(i - 1) == '(') {
ans += stack.size();
} else {
ans++;
}
}
}
System.out.println(ans);
}
}
문제를 풀어보자면 Stack을 사용해주면 문제를 풀 수 있는데, (가 들어오면 Stack에 쌓아준 후 )가 들어오면 스택에서 빼 주되 이전 값이 ( 이어서 () 이런 레이저가 완성되면 지금까지 쌓인 스택을 더해주고, 이전 값이 )였는데 또 )가 나오면 스택에서 하나 빼고 + 1을 더해주는 식으로 진행해주면 된다.
Leave a Reply