[백준] 4949번 균형잡힌 세상 / Java, Python

Jini·2021년 5월 5일
0

백준

목록 보기
97/226

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')





profile
병아리 개발자 https://jules-jc.tistory.com/

0개의 댓글