본문 바로가기

알고리즘 풀이(JAVA)/백준

[백준] 문제번호 4949 (균형잡힌 세상)(java)

<문제 4949 - 균형잡힌 세상>

 

[문제]

 

 

[답안]

import java.io.*;
import java.util.Stack;

public 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 str;

        while (true){
            Stack<Character> stack = new Stack<Character>(); // stack 선언 - Character 클래스 메소드
            str = br.readLine(); // 입력받기
            if (str.equals(".")) break; // 만약 '.'이 들어오면 종료

            int a = -1; // 조건문을 위한 변수 a
            int b = -1; // 조건문을 위한 변수 b

            for (int i = 0; i < str.length(); i++) { // 문자열의 길이만큼 반복
                char ch = str.charAt(i);//문자열의 i번째
                switch (ch){ // '('인 경우
                    case '(':
                        stack.push(ch); // stack에 해당값을 넣어준다
                        a++;
                        break;

                    case '[': // ')'인 경우
                        stack.push(ch); // stack에 해당값을 넣어준다
                        b++;
                        break;
                    case ')' : // ')'인 경우
                        if (a >= 0 && stack.peek() == '('){ // a가 1개 이상있고, 맨위값이 '('인 경우
                            stack.pop(); // 맨위 값을 return + 제거
                            a--;
                        }else a--;
                        break;
                    case ']':
                        if (b >= 0 && stack.peek() == '['){ // b가 1개 이상있고, 맨위값이 '['인 경우
                            stack.pop();// 맨위 값을 return + 제거
                            b--;
                        }else b--;
                        break;
                    default: break;
                }
            }
            if (a == -1 && b == -1 && stack.size() == 0){ // 최초 a, b값이면서 stack이 가지고 있는 원소가 없을 때
                bw.write("yes\n"); // "yes" 출력
            }else bw.write("no\n"); //  아니면 "no" 출력
            stack.clear(); // stack 비우기
        }
        bw.flush();
        bw.close();
        br.close();
    }
}

 

Stack 이용문제