알고리즘 연습

[9012] 괄호 - Java

밀깜 2022. 2. 10. 14:40

 

1. 문제

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

 

9012번: 괄호

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

www.acmicpc.net

 

2. 풀이

 

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

import javax.tools.Tool;

public class Main {

	// Member Field
	private int size;
	private ArrayList<String> stack;

	// Constructor
	public Main() {
		super();
	}

	public Main(int size) {
		super();
		this.size = size;
		this.stack = new ArrayList<String>();
	}

	// main
	public static void main(String[] args) throws NumberFormatException, IOException {

		// Import
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		// Instanciate the main class
		Main tool = new Main(0);

		// Read test case
		int cases = Integer.parseInt(br.readLine());

		// Analyze each case using iteration
		for(int i = 0; i < cases; i++) {

			String result = tool.isVps(br.readLine());

			sb.append(result).append('\n');
		}

		// Print results
		System.out.println(sb);
	}

	// isVps method
	public String isVps(String ps) {

		int length = ps.length();

		for(int i = 0; i < length; i++) {

			String p = Character.toString(ps.charAt(i));

			// if p is "(", then push
			if(p.equals("(")) {
				push(p);
			}
			// if p is ")" and isEmpty, then NO.
			else if (isEmpty()){
				return "NO";
			}
			// if p is ")" and isEmpty, then NO.
			else {
				pop();
			}
		}

		if(isEmpty()) {
			return "YES";
		}
		else {
			size = 0;
			return "NO";
		}
	}

	// pop method
	public void pop() {
		stack.remove(size-1);
		size--;
	}

	// push method
	public void push(String p) {
		stack.add(p);
		size++;
	}

	// isEmpty method
	public boolean isEmpty() {
		if(size == 0) {
			return true;
		}
		else {
			return false;
		}
	}
}

 

3. 배운점

 

 

4. 개선할 점