알고리즘

백준 4949 균형잡힌 세상

킨글 2024. 9. 9. 20:46

설명

  • [와 ] 이 쌍을 이루고, (와 )이 쌍을 이루는지 푸는 문제다. 
  • 단, [ ( ] ) 와 같이 되어 있을 때에 [ 뒤에는 ] 이 와야하고 ( 뒤에는 ) 이 와야 한다. 
    해당 [ ( ] ) 의 경우 (뒤에 ] 가 있어서 No이다.
  • Stack을 이용해서 [ 혹은 (이 있을 때에 Stack에 모두 넣었다. 
  • 만약 ] 혹은 )이 있을 때에 peek을 해서 ]이면 가장 위에 [이 있는지 확인하고, )이면 (이 있는지 확인하는 방식으로 진행한다. 
  • 주의점은 peek 할 때에 isEmpty를 체크해주지 않으면 null 에러난다. 

코드

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 Main {

    // 4949
    public static void main(String[] args) throws IOException {
        process();
    }

    private static void process() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        while(true) {
            Stack<Character> c1 = new Stack<>();

            String s = br.readLine();
            if(".".equals(s)) {
                break;
            }

            boolean isBalance = true;
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                if(c == '(') {
                    c1.add(c);
                } else if(c == ')') {
                    if(!c1.isEmpty() && c1.peek() == '(') {
                        c1.pop();
                    } else {
                        isBalance = false;
                        break;
                    }
                } else if(c == '[') {
                    c1.add(c);
                } else if(c == ']') {
                    if(!c1.isEmpty() && c1.peek() == '[') {
                        c1.pop();
                    } else {
                        isBalance = false;
                        break;
                    }
                }
            }

            if(c1.isEmpty() && isBalance) {
                bw.write("yes\n");
            } else {
                bw.write("no\n");
            }
        }

        bw.flush();
        bw.close();
        br.close();
    }

}