Algorithm/BOJ(Baekjoon Online Judge)

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

koucop 2019. 6. 29. 17:03

이 세상이 균형잡힌 세상인지 알아봅시다

문제를 보자마자 LIFO 방식으로 접근하면 쉽게 풀 수 있을 것 같아서 stack을 이용했습니다

'(' 와 '[' 을 입력받았을 때 stack 에다가 집어넣고, ')' 와 ']' 를 입력 받을 때 stack에서 집어넣은 값을 꺼내서 균형잡혀 있는지 확인해 줬습니다

		if(c == '(' || c == '['){
                    stack.add(c);
                } else if(c == ')'){
                    if(!stack.empty() && stack.pop() == '(') continue;
                    else {
                        chk = false;
                        break;
                    }
                } else if(c == ']') {
                    if(!stack.empty() && stack.pop() == '[') continue;
                    else {
                        chk = false;
                        break;
                    }
                }

 

stack.pop()을 해줄 때 stack에 아무것도 없으면 오류가 뜨니, !stack.empty() 로 에러를 피해주고, 동시에 '(' 와 '[' 가 처음에 들어올 경우를 감지해 줬어요

if(chk && stack.isEmpty()) bw.write("yes\n");
else bw.write("no\n");

 

균형잡혀 있는지는 chk라는 boolean변수를 이용해서 확인해 주었고, 마지막에 stack.empty()인지 확인해주어서 stack 에 아무것도 없음을 확인해 주었어요

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

public class sample{
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int t = 0;
        while(t == 0) {
            String line = br.readLine();
            if(line.equals(".")) break;
            boolean chk = true;
            Stack<Character> stack = new Stack<Character>(); 
            for(int i = 0; i < line.length(); i++){
                char c = line.charAt(i);
                if(c == '(' || c == '['){
                    stack.add(c);
                } else if(c == ')'){
                    if(!stack.empty() && stack.pop() == '(') continue;
                    else {
                        chk = false;
                        break;
                    }
                } else if(c == ']') {
                    if(!stack.empty() && stack.pop() == '[') continue;
                    else {
                        chk = false;
                        break;
                    }
                }
            }
            if(chk && stack.isEmpty()) bw.write("yes\n");
            else bw.write("no\n");
        }

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

야레야레 어렵지는 않은 문제네요

모두들 즐거운 주말코딩 되세요~~

 

문제 : https://www.acmicpc.net/problem/4949