백준 - 9012번 - 괄호

이상훈·2023년 4월 16일
0

9012번

#1 Stack

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

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

		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int num = Integer.parseInt(bf.readLine());

		for (int i = 0; i<num; i++) {
			sb.append(solve(bf.readLine())).append('\n');
		}

		System.out.println(sb);

	}

	static String solve (String text) {

		Stack<String> stack = new Stack<>();
		for (int i = 0; i<text.length(); i++) {
			if (text.charAt(i) == '(') {
				stack.push("(");
			} else {
				if (stack.isEmpty()) {
					return "NO";
				} else {
					stack.pop();
				}
			}
		}

		if (stack.isEmpty()) {
			return "YES";
		} else {
			return "NO";
		}
	}
}

#2 Stack 안쓰고 풀기

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

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

		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int num = Integer.parseInt(bf.readLine());

		for (int i = 0; i<num; i++) {
			sb.append(solve(bf.readLine())).append('\n');
		}

		System.out.println(sb);

	}

	static String solve (String text) {

		int result = 0;
		for (int i = 0; i<text.length(); i++) {
			if (text.charAt(i) == '(') {
				result++;
			} else {
				if (result == 0) {
					return "NO";
				} else {
					result--;
				}
			}
		}

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

풀이


stack을 활용해서 괄호가 열리고 닫히는걸 확인할 수 있었다. 굳이 stack을 사용하지 않아도 푸는건 가능했다.

다만 stack을 쓸경우에 빈 스택에 pop을 하는경우가 생기면 에러가 난다.

추가로 백준 문제에서 예제 입력을 복사해서 입력문에 넣었을때
System.out.println(); 을 쓰면 마지막 한줄이 안 출력이 안된다...
왜 그러는지 찾지는 못했지만 StringBuilder를 사용해서 해결했다.

0개의 댓글