[백준] 균형잡힌 세상 4949번
나의 풀이
public class BalancedWorld {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while(true) {
String sentence = br.readLine();
if(sentence.equals(".")) {
break;
}
if(checkBracket(sentence)) {
sb.append("yes\n");
} else {
sb.append("no\n");
};
}
System.out.println(sb);
}
private static boolean checkBracket(String sentence) {
Stack<String> stack = new Stack<>();
for(int i = 0; i < sentence.length(); i++) {
String s = String.valueOf(sentence.charAt(i));
if(s.equals("(") || s.equals("[")) {
stack.push(s);
}
if(s.equals(")")) {
if(!stack.isEmpty() && stack.peek().equals("(")) {
stack.pop();
} else {
return false;
}
} else if(s.equals("]")) {
if(!stack.isEmpty() && stack.peek().equals("[")) {
stack.pop();
} else {
return false;
}
}
}
return stack.isEmpty() ? true : false;
}
}
- checkBracket 메서드를 만들어서 문장을 검증한다. true 가 나오면 'yes'를 false 가 나오면 'no' 를 출력한다. 이 과정을 '.'만 있는 문장이 나올 때 까지 계속 입력받는다.
checkBracket
- 괄호를 담을 스택을 만들어준다.
- 문자열을 반복하면서 문자가 '(' 나 '[' 처럼 여는 괄호라면 스택에 넣어준다.
- 만약 ')' 나 ']' 처럼 괄호를 닫는 문자라면 스택이 비어있지 않고, 스택에서 꺼낸 여는 괄호와 짝이 맞는다면 스택에서 제거해준다. 아니면 짝이 맞지 않기 때문에 false 를 return 한다.
- 그냥 '[' 처럼 여는 괄호만 들어오거나, 괄호가 없는 문장이 들어올 수 있기 때문에 최종적으로 스택이 비어있는지 확인하고 비어있다면 true 를, 아니면 false 를 리턴한다.