BOJ 4949. 균형잡힌 세상
BOJ 4949. 균형잡힌 세상
풀이
수식의 괄호 쌍을 확인하는 문제이다.
수식의 괄호 쌍을 확인하는 방법은 아래와 같다.
- 여는 괄호가 나오면 스택에 추가한다
- 닫는 괄호가 나왔을 경우
- 2.1 스택이 비어있다면 올바르지 않은 괄호 쌍이다
- 2.2. 스택의 peek가 짝이 맞지 않는 괄호인 경우 올바르지 않은 괄호 쌍이다
- 2.3. 스택의 peek가 짝이 맞는 괄호일 경우 pop 한다
- 모든 과정을 끝낸 후 스택에 괄호가 남아 있으면 올바르지 않은 괄호 쌍, 남아있지 않다면 올바른 괄호 쌍 이다.
문자와 공백을 제외하여 위 방법으로 괄호의 쌍을 검사한다.
import java.io.*;
import java.util.Stack;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String input = br.readLine();
while (!input.equals(".")) {
Stack<Character> s = new Stack<>();
boolean isPerfect = true;
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (!Character.isDigit(c) && c != '.' && c != ' ') {
if (!s.isEmpty() && s.peek() == '[' && c == ']') {
s.pop();
} else if (!s.isEmpty() && s.peek() == '(' && c == ')') {
s.pop();
} else if (c == '(' || c == '[') {
s.push(c);
} else if (c == ')' || c == ']') {
isPerfect = false;
}
}
}
if (s.isEmpty() && isPerfect) bw.write("yes\n");
else bw.write("no\n");
input = br.readLine();
}
bw.flush();
bw.close();
}
}