곽로그

[백준 9012] 괄호 본문

알고리즘/백준

[백준 9012] 괄호

일도이동 2019. 12. 29. 02:07
반응형

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

 

9012번: 괄호

문제 괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(conc

www.acmicpc.net

 

문제

 단계별 문제에 있는 '스택'문제를 그대로 가져와서 썼다. 이 문제의 요점은 (을 입력받으면 push, )를 입력받으면 pop을 하는 거다. 입력받은 괄호들이 유효한 괄호이기 위해서는 pop을 할때 빈 스택에서 pop을 하면 안되고, 입력받은 괄호에 대해 push, pop이 끝났을때 스택에 남아있는 원소가 있으면 안된다. 

 

 pop을 할때 empty함수를 이용하면 더 깔끔할 듯. 

 

보완점

 1) Scanner 에서 nextLine이랑 next차이

 2) 입출력에 대해서

 

코드

package algorithm;

import java.util.Scanner;

class Stack{
	int[] stack;
	int pointer;
	
	public Stack(int size) {
		stack=new int[size];
		this.pointer=-1;
	}
	
	public void push(int p) {
		stack[++pointer]=p;
	}
	public int pop() {
		if(pointer<0) {
			return -1;
		}
		else{
			return stack[pointer--];
		}
	}
	public int size() {
		return pointer+1;
	}
	
	
}
public class Main {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		String parenthesis;
		for(int i=0;i<n;i++) {	
			parenthesis=in.next();
			int length=parenthesis.length();
			Stack stack=new Stack(length);
			boolean valid=true;
			
			for(int index=0;index<length;index++) {
				char c=parenthesis.charAt(index);
				if(c=='(') {
					stack.push(1);
				}
				else {
					int pop=stack.pop();
					if(pop==-1) {
						valid=false;
					}
				}			
			}
			if(stack.size()>0 || !valid) {
				System.out.println("NO");
			}
			else {
				System.out.println("YES");
			}
		}
	}
}
반응형

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

[백준1966] 프린터 큐  (0) 2020.01.12
[백준 10845] 큐  (0) 2020.01.04
[백준 10828] 스택  (0) 2019.12.28
[백준 1874] 스택수열  (0) 2019.12.27
[백준 2841] 외계인의 기타연주 -보완필요  (0) 2019.12.27
Comments