개발쿠키

[백준]괄호(java) 본문

개발/baekjoon&programmers

[백준]괄호(java)

쿠키와개발 2023. 6. 29. 15:57

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

 

9012번: 괄호

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

www.acmicpc.net


이 문제는 스택을 활용한 가아아아아아장 대표적인 문제다. 코드에 주석으로 각 라인이 어떤 것을 의미하는지 달아놨다, 

 

public static String solution(String str) {
    String result = "YES";
    //스택 선언
    Stack<Character> stack = new Stack<>();

    for (char x : str.toCharArray()) {
        //해당 문자일 경우 스택에 push
        if (x == '(') stack.push(x);
        else {
            // ) 해당 문자일 때 스택이 비어있다면 이미 잘못된 문자
            if (stack.isEmpty()) return "NO";
            //스택에서 '(' 문자 pop
            stack.pop();
        }
    }
    //for문이 다 돌았는데 스택이 비어있지 않은 case 
    //()()( <- 이런 케이스들이라고 볼 수 있다.즉 앞에는 정상적으로 쌍을 이루었지만 마지막이 달라서 틀린 경우이다.
    if (!stack.isEmpty()) return "NO";

    return result;
}

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

    int size = in.nextInt();
    String[] strArr = new String[size];

    for (int i = 0; i < size; i++) {
        strArr[i] = in.next();
    }

    for (int i = 0; i < size; i++) {
        System.out.println(solution(strArr[i]));
    }
}