Algorithm/Baekjoon

괄호 : 9012번 - JAVA

cooper_dev 2020. 7. 7. 11:25

 


1. 문제링크

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

 

9012번: 괄호

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

www.acmicpc.net


2. 문제 설명

 

 

 


3. 문제 접근법

  1. 입력받은 문자열 탐색
    1. 괄호 앞부분[(]을 만날 시 -> stack.에 괄호 뒷부분[)]을 추가.
    2. 괄호 뒷부분[)]을 만날 시 -> stack의 가장 윗 값과 비교
      • 일치 시 : stack에 있는 값 추출
      • 불일치 시, is_vps = false(순회가 안끝나고 종료)
  2. 'YES' or 'NO' 확인
    1. YES 조건
      • stack.isEmpty()
      • is_vps == true
    2. NO 조건
      • YES조건 제외한 나머지(else)

 


4. 문제 풀이

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.Scanner;
import java.util.Stack;
 
public class bracket {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int test_case = Integer.parseInt(sc.nextLine());
        
        for (int test_num = 1; test_num <= test_case; test_num++) {
            
            Stack<Character> stack = new Stack<>();
            String brackets = sc.nextLine();
            boolean is_vps = true;
            
            for (int i = 0; i < brackets.length(); i++) {
                char bracket = brackets.charAt(i);
                if(bracket == '(')    stack.push(')');
                if(bracket == ')') {
                    if(!stack.isEmpty() 
&& brackets.charAt(i) == stack.peek()) {
                        stack.pop();    
                    }else {
                        is_vps = false;
                        break;
                    }
                }
            }
 
            if(is_vps && stack.isEmpty())    {
                System.out.println("YES");
            }else {
                System.out.println("NO");    
            }
 
        }
        
        
        sc.close();
    }
}
 

 

 

 

 

 

<정답확인>


5. 개선점 또는 트러블 슈팅

-조건절 작성 시, 예외가 되는 부분 고려해서 작성할 것!