본문 바로가기
Algorithm

[백준] 9012 - 괄호

by jaee_ 2021. 10. 5.

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

 

9012번: 괄호

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

www.acmicpc.net


입력

입력 데이터는 표준 입력을 사용한다. 입력은 T개의 테스트 데이터로 주어진다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 괄호 문자열이 한 줄에 주어진다. 하나의 괄호 문자열의 길이는 2 이상 50 이하이다.

출력

출력은 표준 출력을 사용한다. 만일 입력 괄호 문자열이 올바른 괄호 문자열(VPS)이면 “YES”, 아니면 “NO”를 한 줄에 하나씩 차례대로 출력해야 한다. 


나의 풀이

package week09;

import java.util.Scanner;
import java.util.Stack;

public class 괄호 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int t = sc.nextInt();

        for (int i = 0; i < t; i++) {
            System.out.println(stackMethod(sc.next()));
        }

    }

    private static String stackMethod(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.empty()){
                return "NO";
            }else{
                stack.pop();
            }
        }

        if(stack.empty()){
            return "YES";
        }else{
            return "NO";
        }
    }
}

풀이 방법 

  1. stack 생성
  2. 여는 괄호 "(" 면 push()
  3. 여는 괄호가 아닌데 만약 stack이 비어있다면 "NO"
  4. 닫는 괄호 ")" 면 pop()
  5. 반복문 종료 후 stack이 비어있다면 "YES"
  6. 반복문 종료 후 stack이 비어있지 않다면 맞지 않는 거니까 "NO"

 

댓글