Coding Test Study/Backjoon

[Coding/Backjoon] 9012번 괄호

똑똑한망치 2023. 11. 20. 13:43
728x90
반응형

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

 

9012번: 괄호

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

www.acmicpc.net

 

 

 

 

 


 

 

1. 구현할 방식


"(" 가 입력된다면 Stack에 데이터를 삽입하고 ")" 이 입력된다면 Stack에 저장된 데이터를 한 개 씩 pop() 한다.

이때 Stack에 아무런 데이터가 없는 상태에서 ")"이 입력된다면 VPS가 아예 불가능하기 때문에 NO를 출력한다.

 

 

 

 

 


 

 

 

 

 

2. 코드 구현 부분


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

public class Main {
	public static void main(String[] args) {
    	Scanner sc = new Scanner(System.in);
        int cnt = sc.nextInt();
        sc.nextLine();     // 엔터키 삭제하는 효과
        
        ArrayList<String> inputData = new ArrayList<>();   // 여러 개를 입력받아 inputData 배열에 저장
        
        for(int i =0; i<cnt ; i++) {      // 한줄씩 입력받아 배열에 저장
        	String data = sc.nextLine();
            inputData.add(data);
        }
        
        Stack<String> stack = new Stack<>();   // Stack 객체 생성
        
        for (int j=0; j<inputData.size(); j++) {   // 입력받은 문자열을 순서대로 가져온다
        	for(int i=0; i<inputData.get(j).length(); i++) {    // i번째로 입력받은 수에서 한글자씩 분리하여 a배열에 저장
            	String[] a = inputData.get(j).split("");
                
                if(a[i].equals("(")) {    //"("이 입력되면 stack에 데이터 추가
                	stack.push(a[i]);
                } else if (a[i].equals(")")) {   // ")"이 입력되었을 때
                	if (stack.size() > 0) {      // stack에 데이터가 존재한다면
                    	stack.pop();
                    } else {                     // Stack이 비어있으므로 "-1" 삽입 후 반복문 탈출
                    	stack.push("-1");
                        break;
                    }
                }
            }
            
            if (stack.isEmpty()) {
            	System.out.println("YES");
            } else {
            	System.out.println("NO");
            }
            stack.clear();
        }
    }
}
반응형