

없음. 스택을 사용해보려 했지만 아이디어가 안떠오름 ㅠ
class Main {
public static void main(String[] args) throws IOException {
/**
* 연속으로 [A,A] 또는 [B,B]가 스택에 들어오면 제거하여
최종적으로 스택이 비어있으면 카운트를 늘린다.
*/
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int count = 0;
for (int i = 0; i < n; i++) {
String line = br.readLine();
Stack<Character> stack = new Stack<>();
for (int j = 0; j < line.length(); j++) {
if (stack.size() > 0 && stack.peek() == line.charAt(j)) {
stack.pop();
} else {
stack.push(line.charAt(j));
}
}
if (stack.size() == 0) {
count++;
}
}
System.out.println(count);
}
}

구현 방식 자체는 간단했다.
스택 안에 아무것도 없으면 push()를 하고,
스택 안에 요소가 있으면 후보와 peek()한 값과 동일하면 좋은단어로 판단하여 두 값을 제거한다.
세번째 경우를 보자. A,A가 서로 B,B사이에 떨어져있지만 마지막에 스택은 empty가 된다.
사실 이런 문제는 실력도 실력이지만 문제를 많이 풀어봐야 풀 수 있는 것 같다. 확실히 실버 문제들은 단순히 자료구조를 잘 아는 것보다 풀이요령을 아는게 중요한 것 같다.
6월에는 이런 어려운 문제도 잘 풀 수 있겠지?!