개발자 미니민의 개발스터디

[백준 JAVA] 4949번 풀이 - 균형잡힌 세상

by mini_min


* - 어떤 문자열이 주어질 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짠다.
* 소괄호 () 와 대괄호 []로 괄호 종류는 2가지 이다.
* 조건 : 모든 괄화들은 각각의 괄호들과 짝을 이뤄야한다.
* 오른쪽 괄호는 짝을 이룰 왼쪽 괄호가 존재한다.
* 괄호들은 1:1 매칭만 가능하다.
* 짝을 이루는 두 괄호가 있을 때, 그 사이 문자열도 균형이 잡혀야한다.


* 각 문자열은 마지막 글자 제외하고 영문 알파벳, 공백, 소괄호, 대괄호로 이뤄진다.
* 온점(.)으로 끝나야하고, 길이는 100글자보다 작거나 같다.
* 입력 종료 조건으로 맨 마지막에 온점 하나가 들어온다.

입력 예제
* So when I die (the [first] I will see in (heaven) is a score list).
* [ first in ] ( first out ).
* Half Moon tonight (At least it is better than no Moon at all].
* A rope may form )( a trail in a maze.
* Help( I[m being held prisoner in a fortune cookie factory)].
* ([ (([( [ ] ) ( ) (( ))] )) ]).

package quiz;

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

public class _4949 {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        Stack<Character> stack = new Stack<>();

        while(true){
            stack.clear();
            String words = br.readLine();
            if(words.equals(".")){
                break;
            }

            for(int i=0; i<words.length(); i++){
                char temp = words.charAt(i);

                if(temp =='(' || temp =='['){
                    stack.push(temp);
                } else if(temp==')' || temp ==']') {
                    if(stack.isEmpty() || (stack.peek() == '(' && temp == ']') || (stack.peek()=='[' && temp==')') ){
                        stack.push(temp);
                        break;
                    }
                    stack.pop();
                }
            }

            if(!stack.isEmpty()){
                bw.write("no"+"\n");
            } else {
                bw.write("yes"+"\n");
            }

            bw.flush();
        }

        bw.close();
    }
}


풀이

(, [ 로 시작하는 경우, stack 에 정상적으로 넣는다. 
), ] 가 걸리는 경우, (1) (, [ 가 stack 에 저장되어 있는지, (2) 소괄호와 대괄호가 짝으로 들어가는지 체크해야한다. 
이상 없는 경우 소괄호와 대괄호가 짝을 이루면 pop 해서 stack 안에 값을 뺀다. 

stack 이 empty 인 경우 yes / 아닐 경우 no 를 출력한다. 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기