🌞Algorithm/🔥Baekjoon

[Baekjoon] 7585_Brackets

뿌야._. 2025. 5. 29. 20:37
문제(출처: https://www.acmicpc.net/problem/7585)

< Brackets >

 

문제 풀이 

 

Stack을 사용하여 괄호가 합법적인지 확인한다.

 

my solution (Java)

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

public class _7585_ { // Brackets

	public static void main(String[] args) throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		String str = "";
		while (!(str = bf.readLine()).equals("#")) {
			Stack<Character> stack = new Stack<>();
			boolean flag = false;

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

				if (str.charAt(i) == '(' || str.charAt(i) == '{' || str.charAt(i) == '[') {
					stack.add(str.charAt(i));
				} else if (str.charAt(i) == ')') {
					if (!stack.isEmpty() && stack.peek() == '(') {
						stack.pop();
					} else {
						flag = true;
						break;
					}
				} else if (str.charAt(i) == '}') {
					if (!stack.isEmpty() && stack.peek() == '{') {
						stack.pop();
					} else {
						flag = true;
						break;
					}
				} else if (str.charAt(i) == ']') {
					if (!stack.isEmpty() && stack.peek() == '[') {
						stack.pop();
					} else {
						flag = true;
						break;
					}
				}
			}
			if (!stack.isEmpty()) {
				flag = true;
			}
			if (flag) {
				bw.write("Illegal\n");
			} else {
				bw.write("Legal\n");
			}
		}
		bw.flush();
	}
}
변수)
str : 입력
stack : Stack <Character> 괄호 저장하는 스택
flag : 합법 여부

 

#가 입력되기 전까지 다음 과정을 반복한다.

 

1) 문자열을 전체 탐색한다.

2) 열린 괄호라면 stack에 추가한다.

3) 닫는 괄호라면 stack.peek() 값과 짝이 맞는지 확인하고 맞다면 stack.pop()을, 맞지 않다면 불법이므로 flag를 true로 저장하고 종료한다.

4) 문자열 탐색 후 stack이 비어있지 않다면 올바르지 않으므로 flag를 true로 저장한다.

5) flag 값에 따라 출력한다.