본문 바로가기

[BOJ] - JAVA

[백준] 9012 : 괄호 JAVA 풀이

 

이건 자바에 스택 클래스가 있다는 걸 모르고 푼 코드이다.

여기저기...군더더기가 많아 보임

import java.io.*;
import java.util.*;

public class Main {
	static int size = 0;
	public static void main(String[] args)throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();
		
		for(int i=0;i<N;i++) {
			String str = br.readLine();
			sb.append(solve(str)).append('\n');
			size = 0;
		}
		System.out.println(sb);
	}
	
	static void push(int[] stack, int n) {
		stack[size] = n;
		size++;
	}
	
	static boolean empty(int[] stack) {
		if(size==0) return true;
		return false;
	}
	static boolean pop(int[] stack) {
		if(size==0) {
			return false;
		}
		stack[size-1] = 0;
		size--;
		return true;
	}
	
	static String solve(String str) {
		int len = str.length();
		int[] stack = new int[len];
		
		for(int i=0;i<len;i++) {
			char c = str.charAt(i);
			
			if(c=='(') {
				push(stack, 1);
			}
			
			else if(empty(stack)) {
				return "NO";
			}
			
			else {
				pop(stack);
			}
		}
		if(empty(stack)) {
			return "YES";
		}
		else {
			return "NO";
		}
		
	}

}

 

그리고 이게 java.util.stack를 사용해서 푼 코드다.

 

import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args)throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();
		
		for(int i=0;i<N;i++) {
			sb.append(solve(br.readLine())).append('\n');
		}
		System.out.println(sb);
	}
	
	static String solve(String str) {
		
		Stack<Character> stack = new Stack<>();
		
		for(int i=0;i<str.length();i++) {
			char c = str.charAt(i);
			
			if(c=='(') {
				stack.push(c);
			}
			
			else if(stack.empty()) {
				return "NO";
			}
			else {
				stack.pop();
			}
		}
		if(stack.empty()) {
			return "YES";
		}
		else {
			return "NO";
		}
		
	}

}