본문 바로가기

코딩테스트/백준

[백준-자바] 9012번 괄호 / 2022.03.08

 

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

 

9012번: 괄호

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

www.acmicpc.net

 

 

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

public class Main{
    public static void main(String [] args){
        Scanner sc = new Scanner(System.in);
        // Stack 선언
        Stack<Character> stack = new Stack<>();
        int T = sc.nextInt(); // 테스트 케이스
        for(int i=0; i<T; i++){
            String str = sc.next(); // 문자열 입력
            for(int j=0; j<str.length(); j++){ // 문자열을 문자로 접근 인덱스 0번부터
                if(str.charAt(j)=='(')  // 여는 괄호라면 스택에 push
                    stack.push(str.charAt(j));
                else{ // 닫는 괄호라면?
                    if(stack.isEmpty()) { // 스택이 비어있으면
                        stack.push(str.charAt(j)); // 스택에 push
                        break;
                    }
                    else if(stack.peek()=='(') // 스택이 비어있지않고 맨 위가 여는 괄호라면
                        stack.pop(); // 짝이 지어지므로 여는괄호를 pop
                    else // 스택이 비어있지않고 맨 위가 닫는 괄호라면
                        stack.push(str.charAt(j)); // 스택에 push
                }

            }
            if(stack.size()==0) // 위 과정 종료 후 스택이 비어있다면 성공
                System.out.println("YES");
            else // 아니면 실패
                System.out.println("No");
            stack.clear(); // 다음을 위해 스택 비우기
        }
    }
}

 

풀이 : 

1. 여는 괄호라면 스택에 push 한다

2. 닫는 괄호일 때, 스택이 비어있다면 스택에 push -> 스택이 비어있지 않고 맨 위가 여는 괄호라면 여는 괄호를 pop -> 스택이 비어있지 않고 맨 위가 닫는 괄호라면 스택에 push

3. 위 과정 종료 후 스택이 비어있다면 "YES" 아니라면 "NO" 출력