알고리즘

백준 3986번 좋은 단어 (JAVA)

박카스마시며코딩 2023. 5. 12. 21:35

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

 

3986번: 좋은 단어

이번 계절학기에 심리학 개론을 수강 중인 평석이는 오늘 자정까지 보고서를 제출해야 한다. 보고서 작성이 너무 지루했던 평석이는 노트북에 엎드려서 꾸벅꾸벅 졸다가 제출 마감 1시간 전에

www.acmicpc.net

 

저는 스택을 통해 문제를 해결하였습니다.

저는 아치형 곡선을 그어 같은 글자끼지 연결하였을 때 선이 교차하지 않는 것이기 때문에 저는 괄호 문제와 비슷하다고 생각하였습니다.

문자열을 돌면서 stack이 비어있거나 stack맨 위와 지금 글자가 다르다면 넣고 같다면 stack에서 하나 빼줘서 문제를 해결하였습니다.

 

package BOJ.etc;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Stack;

public class BOJ_3986 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int result = 0;
        for(int i = 0 ; i < n ; i++) {
            String str = br.readLine();
            if (check(str)) {
                result++;
            }
        }
        System.out.println(result);
    }
    private static boolean check(String str){
        int size = str.length();
        if(size % 2 != 0){
            return false;
        }
        Stack<Character> stack = new Stack<>();
        for(int i = 0 ; i < size ; i++){
            char ch = str.charAt(i);
            if(stack.isEmpty() || stack.peek() != ch){
                stack.push(ch);
                continue;
            }
            stack.pop();
        }
        if(!stack.isEmpty()){
            return false;
        }
        return true;
    }
}