괄호

곽지욱·2024년 3월 18일

BOJ

목록 보기
51/69

백준 9012번 : 괄호

알고리즘

  • 문제를 해석해보면 여는 괄호 '(' 가 있으면 반드시 ')'로 짝이 맞아야 VPS 조건이 된다는 것임

  • 여는 괄호가 있을 때는 스택에 쌓고 닫는 괄호가 나오면 여는 괄호를 하나 pop 하여 0으로 만들어야 함


1.여는 괄호와 닫는 괄호가 짝이 맞는 경우

  • 모든 과정이 끝났을 때 stack이 비어있는 경우

2. 괄호가 남는 경우 (닫는 괄호 부족)

  • 모든 입력이 끝났을 때, stack이 비어있지 않은 경우

3. 괄호가 부족한 경우 (닫는 괄호가 많은 경우)

  • 닫는 괄호를 입력 받았을 때 stack 이 이미 비어있는 경우


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

public class VPS_1 {
    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(solve(sc.next()));

        }


    }

    private static String solve(String s) {
        Stack<Character> stack = new Stack<>();


        for(int i =0; i<s.length();i++){

            char c = s.charAt(i);

            if(c == '('){
                stack.push(c);
            }
            else if(stack.empty()){
                return "NO";
            }
            else {
                stack.pop();
            }



        }

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

    }
}
  • nextLine()은 개행 문자(엔터) 까지 포함하여 버퍼에 저장하기 때문에 next()를 사용하여 개행 문자를 무시하고 오롯이 문자열만 비교할 수 있도록 함.

사진 출처

0개의 댓글