백준/스택 & 큐
[스택] 백준 3986번 좋은단어- Java
킴준현
2025. 4. 8. 16:12
https://www.acmicpc.net/problem/3986
✅ 문제
📌 접근방법
처음에 문제를 한 번에 이해를 못했지만, 알고리즘 분류에 스택이라는 힌트를 보고 다시 생각해보니 어떻게 접근할 지 이해가 되었다.
ABAB는 선이 교차해서 좋은 단어가 될 수 없다. ABBA와 AABB는 선끼리 교차하지 않고, 각 글자가 다른 위치에 있는 같은 글자와 짝 지을 수 있어 좋은 단어가 될 수 있다.
스택을 만들어 스택이 비어있는 상태가 되면 좋은 단어가 된다.
🔑 풀이
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int count = 0;
for (int t = 0; t < N; t++) {
Stack<Character> st = new Stack<>();
char[] text = br.readLine().toCharArray();
st.push(text[0]); // 맨 앞에꺼 먼저 스택에 넣기
for (int i = 1; i < text.length; i++) {
char now = text[i];
if(!st.empty() && st.peek().equals(now)) { // 스택이 비어있지 않고, 스택의 맨 위거와 now랑 같은 경우
st.pop();
} else { // 스택이 비어있거나, 스택의 맨 위거와 now가 서로 다른 경우
st.add(now);
}
}
if(st.empty()) { // 스택이 비어있는 경우, 좋은 단어!
count++;
}
}
System.out.println(count); // 좋은 단어 수 출력
}
}
실행 코드