균형잡힌 세상

곽지욱·2024년 3월 18일

BOJ

목록 보기
52/69

4949번 : 균형잡힌 세상

알고리즘

  • 첫 번째로 '괄호 문자' 인지를 판단해야 하고 이후 '여는 괄호' 인지 '닫는 괄호' 인지를 판단하며 , 닫는 괄호일 경우 ']' 은 '['와 매칭되어야 하고 ')'의 경우는 '(' 과 매칭되어야 한다

그리고 괄호가 아닌 문자의 경우 그냥 넘어간다.


import java.util.Scanner;
import java.util.Stack;

public class VPS_World {
    public static void main(String[] args) {


        Scanner sc = new Scanner(System.in);



        String s;

        while(true){
            s = sc.nextLine();

            if (s.equals(".")){
                break;
            }
            System.out.println(solve(s));
        }







    }

    private static String solve(String s) {

        Stack<Character> stack = new Stack<>();

        for (int i = 0; i<s.length(); i++){
            char c = s.charAt(i);

            if(c == '(' || c == '['){
                stack.push(c);
            } else if (c == ')') {

                if (stack.empty() || stack.peek() != '('){
                    return "no";
                }
                else{
                    stack.pop();
                }

            } else if (c == ']') {
                if (stack.empty() || stack.peek() != '['){
                    return "no";
                }
                else {
                    stack.pop();
                }
            }


        }

        if (stack.empty()){
            return "yes";
        }
        else {
            return "no";
        }



    }
}

  1. String s를 입력받고 종료조건 '.' 을 선언한다.

  2. s를 한글자 씩 비교해가며, ( 혹은 [에 해당할 경우 stack에 삽입하여준다.

  3. 닫는 괄호{')'}가 먼저 나왔을 경우 스택이 비어있는지(매칭 실패)확인하고 혹은 스택 최상단에 존재하는 원소가 '(' 가 아닐 경우 (괄호 끼리 매칭 실패) no를 반환한다

  4. 두가지 경우에 해당하지 않는 경우 즉,괄호가 나왔는데 스택이 비어있지 않고 스택끼리 매칭이 잘 되었을 때는 stack.pop()

  5. 다른 경우에도 마찬가지로 진행하고 마지막에 stack이 비어있으면 "yes" 아니면 "no"를 반환한다

0개의 댓글