[백준] 균형잡힌 세상 4949번 - Java

GOSHK·2022년 2월 6일
0

[백준] Java

목록 보기
11/49
post-thumbnail

[백준] 균형잡힌 세상 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 를 리턴한다.

0개의 댓글