문제 내용은 입력으로 문자열을 받아서 ABAB 처럼 교차하지 않고 아치 형태로 A, B가 짝을 맞춰 연결되면 좋은 단어이고, 이 좋은 단어의 갯수를 출력해주면 되는데
문제는 아치형태로 그려서 문제를 풀기가 참 난감한데
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));
int count = Integer.parseInt(br.readLine());
int ans = 0;
for (int i = 0; i < count; i++) {
Stack<Character> stack = new Stack<>();
String s = br.readLine();
for (int j = 0; j < s.length(); j++) {
char val = s.charAt(j);
if (stack.empty()) {
stack.push(val);
} else {
if (stack.peek() == val) {
stack.pop();
} else {
stack.push(val);
}
}
}
if (stack.empty()) {
ans++;
}
}
System.out.println(ans);
}
}
아치를 생각하면 눈 앞이 막막하지만, 스택을 사용하면 간단하게 풀 수 있는데 먼저 입력받은 문자열을 쪼개서 하나씩 넣어주다가, 비었을때는 스택에 넣어주고, 다음 문자열이 stack에서 나올 문자열과 동일하면, pop 다르면 push 하는 식으로 진행해주면
스택이 모두 비었을 경우에만 좋은 단어이므로, 좋은 단어를 하나씩 더해준 후 입력이 끝나고 나면 좋은 단어의 수를 출력해주면 끝이다.
Leave a Reply