본문 바로가기
코딩테스트 준비/백준

[백준] 3986번 - 좋은 단어 [Java]

by mwzz6 2025. 2. 11.

https://www.acmicpc.net/problem/3986

 

[백준] 3986번 - 좋은 단어 [Java]
[백준] 3986번 - 좋은 단어 [Java]


1.  아이디어

 

단어를 아치형 곡선으로 쌍을 짓는다는 점에서 Stack 자료구조를 활용하면 간단하게 해결할 수 있다.


2. 문제풀이

 

각 단어에 대해 Stack이 비어있거나 Stack의 peek와 일치하지 않는 경우 Stack에 넣고 일치하면 Stack에서 빼는 걸 반복했을 때 좋은 단어는 전부 쌍을 이뤄서 Stack이 비게되는 점을 활용해서 구현했다.


3. 코드

 

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 cnt = 0;

        for (int i = 0; i < N; i++) {
            Deque<Character> stack = new ArrayDeque<>();

            char[] input = br.readLine().toCharArray();
            for (char c : input) {
                if (stack.isEmpty()) stack.push(c);
                else {
                    if (stack.peek() != c) stack.push(c);
                    else stack.pop();
                }
            }

            if (!stack.isEmpty()) continue;

            cnt++;
        }

        System.out.println(cnt);
    }
}

4. 후기