본문 바로가기

Java/백준

[JAVA] 백준 9012 괄호

9012번: 괄호 (acmicpc.net)

 

9012번: 괄호

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

www.acmicpc.net

 

풀이 과정 

 

괄호 검사 알고리즘 

 

- 문자열에 있는 괄호를 차례대로 조사하면서 왼쪽 괄호를 만나면 stack에 push

- 오른쪽 괄호를 만나면 stack의 top과 괄호의 짝이 맞는지 비교 

- 짝이 맞는 경우  stack에서 pop을 수행하고 위의 조사 반복 

- 짝이 맞지 않거나 stack이 비어 있는 경우 False

- 문자열을 전부 검사한 후 stack이 비어있으면 True

- 만약 괄호가 남아있다면 False

 

 

정답 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int num = Integer.parseInt(br.readLine());
        
        for(int i=0; i<num; i++)
        {
            String s = br.readLine();
            //각 테스트 케이스마다 새로운 스택 생성
            Stack<Character> stack = new Stack<Character>();
            boolean check = true;
            
            for(int j=0; j<s.length(); j++)
            {
                if(s.charAt(j)=='(') //왼쪽 괄호를 만났을 경우 푸시
                {
                    stack.push(s.charAt(j));
                }
                else if(stack.isEmpty()) //오른쪽 괄호를 만났는데 스택이 비어있는 경우 
                {
                	check=false;
                }
                else //오른쪽 괄호를 만났을 때 짝이 맞는 경우 
                {
                	stack.pop();
                } 
            }
          //모든 문자열 검사를 마쳤는데 스택에 남은 왼쪽 괄호가 있을 경우 NO
            if(!stack.isEmpty())
            {
            	check=false;
            	
            }
            
            if(check)
            	System.out.println("YES");
            else
            	System.out.println("NO");
            
        }
        
        
    }
}

 

 

'Java > 백준' 카테고리의 다른 글

[JAVA] 백준 12789 도키도키 간식드리미  (1) 2024.02.10
[JAVA] 백준 4949 균형잡힌 세상  (2) 2024.02.08
[JAVA] 백준 10773 제로  (0) 2024.02.08
[JAVA] 백준 28278 스택 2  (0) 2024.02.08
[JAVA] 백준 18870 좌표 압축  (1) 2024.02.07