![[스택] 백준 3986번 좋은단어- Java](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbPWk2N%2FbtsNcWCM0mG%2FAAAAAAAAAAAAAAAAAAAAACxWTcYmj18nXvdnhlmgh8zyDH6dOwV7fKAYPWN9BDtF%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1751295599%26allow_ip%3D%26allow_referer%3D%26signature%3DKltx%252BOXdyjpgCjmwRn0pSZxlVqE%253D)
[스택] 백준 3986번 좋은단어- Java백준/스택 & 큐2025. 4. 8. 16:12
Table of Contents
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); // 좋은 단어 수 출력
}
}
실행 코드
'백준 > 스택 & 큐' 카테고리의 다른 글
99클럽 코테 스터디 7일차 TIL - [스택] 백준 10799번 : 쇠막대기 (0) | 2025.04.09 |
---|---|
[큐] 백준 10845번 큐 - Java (0) | 2025.04.08 |
@킴준현 :: 차근차근 꾸준히
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!