응애개발자
article thumbnail
728x90

문제

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

 

접근 방법

  1. https://eungae-d.tistory.com/118 이것과 유사한 문제입니다.
  2. 스택을 사용하여 '(' 이것이 나오면 스택에 넣어주고, ')' 이것이 나왔을때 스택이 비어있거나 최상단이 '(' 이것이 아닐경우 NO를 리턴해줍니다.
  3. 만약 통과한다면 스택에 값이 있고, 스택최상단이 '(' 이것이므로 짝을 맞추어 스택에서 pop하여 제거해줍니다.
  4. 최종적으로 스택에 남아있는게 하나도 없으면 YES, 남아있는게 있으면 ex. ( ( (   이런식으로 NO를 리턴해줍니다.

코드

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

public class Main {
    private static StringBuilder sb;
    private static BufferedReader br;
    private static StringTokenizer st;
    private static int N;
    private static Stack<Character> stack;

    //입력
    public static void input() throws Exception {
        br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();

        N = Integer.parseInt(br.readLine());

        for(int i = 0 ; i < N ; i++){
            stack = new Stack<>();

            String line = br.readLine();

            sb.append(process(line)).append("\n");
        }
    }

    //실행
    public static String process(String line) {
        for(int i = 0 ; i < line.length() ; i++){
            char c = line.charAt(i);

            if(c == '('){
                stack.push('(');
            }else if(c == ')'){
                if(stack.isEmpty() || stack.peek() != '('){
                    return "NO";
                }

                stack.pop();
            }
        }

        if(stack.isEmpty()) return "YES";
        return "NO";
    }


    public static void main(String[] args) throws Exception {
        input();
        System.out.println(sb.toString());
    }
}
profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!