본문 바로가기
Algorithm/문제 풀이

[알고리즘] 괄호 체크 (백준 9012번)

by Sky Titan 2020. 8. 24.
728x90
 

9012번: 괄호

문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)��

www.acmicpc.net

 

 문자열 처리 중 괄호 쌍 체크의 가장 핵심은 stack의 사용이다.

 

  1. string 길이만큼 반복문을 돌며 각 자리에 있는 character를 체크한다.
    1. 여는 괄호 ' ( ' 가 나오는 경우
      1. stack에 push 한다.
    2. 닫힌 괄호 ' ) ' 가 나오는 경우 
      1. stack이 비어있으면 NO 반환
      2. stack이 비어있지 않다면 stack에서 괄호 하나를 pop 한다.
  2. 반복문 종료 후 stack에 괄호가 남아있다면 NO 반환
  3. 그렇지 않다면 YES 반환

 

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

public class Main {


    static String isCorrect(String str)
    {
        Stack<Character> stack = new Stack<>();

        for(int i = 0;i < str.length();i++)
        {
            char c = str.charAt(i);

            //열린 괄호
            if(c == '(')
                stack.push(c);
            //닫힌 괄호
            else
            {
                if(stack.isEmpty())
                    return "NO";
                else
                    stack.pop();
            }
        }

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

    public static void main(String[] args) {

        try
        {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

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

            for(int i = 0;i < N;i++)
            {
                String str = br.readLine();

                System.out.println(isCorrect(str));
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }

}
728x90

댓글