백준 4949번: 균형잡힌 세상[Stack][스택] -Java, 반례 :: 매운코딩
728x90
300x250

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

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net

 

백준 4949번 반례모음

---------------------------------------------------------
([)]).
.

답:no
---------------------------------------------------------
(
.

답: no
---------------------------------------------------------
[(()(])).
.

답: no
---------------------------------------------------------
].
.

답: no
---------------------------------------------------------

 

 

 

<Java 코드>

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class Main {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		while (true) {
			String res = "yes";
			String st = br.readLine();
			// 온점만 있으면 종료
			if(st.equals("."))
				break;
			// 괄호빼고는 치환
			st = st.replaceAll("[a-zA-Z .]", "");
			
			Stack<Character> stack = new Stack<Character>();
			
			for (int i = 0; i < st.length(); i++) {
				// 여는 괄호만 stack에 보관
				if(st.charAt(i)=='(' || st.charAt(i)=='[')
					stack.push(st.charAt(i));
				// 닫는 괄호가 나오면 맨앞의 괄호와 쌍이 맞는지 체크
				else {
					if(stack.empty()) {
						res = "no";
						break;
					}
					
					char ch = stack.peek();
					if((st.charAt(i)==')' && ch == '[')
						|| (st.charAt(i)==']' && ch == '(')){
						res="no";
					} else {
						stack.pop();
					}
				}
			}
			//여는괄호만 남아있는 경우도 no임
			if(!stack.isEmpty())
				res = "no";
			System.out.println(res);
		}
	}

}
728x90

+ Recent posts