[伯俊]4949号均衡の世界/Java,Python


Baekjoon Online Judge


algorithm practice


-問題を逐次解く


18.スタック


スタックを実装して使用します.
Java/Python

4.バランスのとれた世界


4949号
かっこの種類が多い問題.

この問題は、前のカッコの問題(9012)よりもアップグレードされます.
9012に角カッコを追加し、条件を変更するだけです.
  • Java
  • import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.IOException;
    import java.util.Stack;
     
    public class Main {
     
    	public static void main(String[] args) throws IOException {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		StringBuilder sb = new StringBuilder();
     
    		String str;
    		
    		while(true) {
    			
    			str = br.readLine();
    			
    			if(str.equals(".")) {	// 종료 조건문 
    				break;
    			}
    			
    			sb.append(solve(str)).append('\n');
    		}		
    		System.out.println(sb);
    				
    	}
    	
    	public static String solve(String s) {
    		
    		Stack<Character> stack = new Stack<>();
    		
    		for(int i = 0; i < s.length(); i++) {
    			
    			char c = s.charAt(i);	// i 번째 문자 
    					
    			if(c == '(' || c == '[') {	// 여는 괄호 경우, 스택에 push 
    				stack.push(c);
                    
    			}else if(c == ')') {	// 닫는 소괄호 경우 
    				
    				// 스택이 비어있거나 pop할 원소가 소괄호랑 매칭이 안되는 경우 
    				if(stack.empty() || stack.peek() != '(') {
    					return "no";
    				}
    				else {
    					stack.pop();
    				}
    			}
    			
    			else if(c == ']') {
    				
    				// 스택이 비어있거나 pop할 원소가 대괄호랑 매칭이 안되는 경우 
    				if(stack.empty() || stack.peek() != '[') {
    					return "no";
    				}
    				else {
    					stack.pop();
    				}
    			}    // 그 외 문자는 상관 X
    		}
    		
    		if(stack.empty()) {
    			return "yes";
    		}
    		else {
    			return "no";
    		}
    	}
    }
  • Python
  • while True:
        s = input()
        if s == '.':
            break
        stack = []
        result = True
        for c in s:
            if c == '(' or c == '[':
                stack.append(c)
            elif c == ')':
                if not stack or stack[-1] == '[':
                    result = False
                    break
                elif stack[-1] == '(':
                    stack.pop()
            elif c == ']':
                if not stack or stack[-1] == '(':
                    result = False
                    break
                elif stack[-1] == '[':
                    stack.pop()
        if result == True and not stack:
            print('yes')
        else:
            print('no')