Java/Algorithm

[Java-Algorithm] 백준 4949 균형잡힌 세상 풀이

Jeong Jeon
반응형

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

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마

www.acmicpc.net

 

 

풀이 :

스택에 여는 괄호들을 쌓아두고, 괄호를 하나씩 빼면서 체크했다.

출력조건이 뭔가 안맞았는지 계속 틀렸다고 떠서... 찾느라 고생했다

결과는 같은데 띄어쓰기가 껴있었다...

public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		while(true) {
			String txt = br.readLine();
			//종료조건
			if(txt.equals(".")) {
				break;
			}
			System.out.println(stacks(txt));
		}
	}

	static String stacks(String txt) {
		//괄호 앞 뒤 짝이 맞아야된다. ( 소괄호 ) [ 대괄호 ]
		Stack<String> sQ = new Stack<String>();

		String[] txtArr = txt.split("");
		String tmp = "";
		for (int i = 0; i < txtArr.length; i++) {
			//열림괄호 입력
			if(txtArr[i].equals("(")){
				sQ.push(txtArr[i]);
			}
			if(txtArr[i].equals("[")) {
				sQ.push(txtArr[i]);
			}

			if(txtArr[i].equals(")")) {
				if(sQ.isEmpty()) {
					return "no";
				}else {
					tmp = sQ.peek();
					if(!tmp.equals("(")) {
						return "no";
					}else {
						sQ.pop();
					}
				}
			}
			if(txtArr[i].equals("]")) {
				if(sQ.isEmpty()) {
					return "no";
				}else {
					tmp = sQ.peek();
					if(!tmp.equals("[")) {
						return "no";
					}else {
						sQ.pop();
					}
				}
			}
		}
		if(sQ.isEmpty()) {
			return "yes";
		}else {
			return "no";
		}
	}
    
반응형