1일1알고/Java Algorithm

[23/04/25] B4949

kim chan jin 2023. 4. 25. 21:04
package baekjoon;

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

public class B4949 {
    public static void main(String[] args) throws IOException {
        String line;

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        while(true) {
            line = br.readLine();
            if(line.equals(".")) {
                break;
            } else {
                System.out.println(isBalanced(line));
            }
        }
    }

    public static String isBalanced(String line) {
        Stack<Character> stack = new Stack<>();

        char[] charArr = line.toCharArray();

        for(char c : charArr) {
            if(c == '(' || c == '[') {
                stack.push(c);
            }
            // 닫는문자 ) 라면
            else if(c == ')') {
                // 스택에 ( 있는지 또는 스택이 비었는지 확인하고 그러하다면 no
                if(stack.empty() || stack.peek() != '(') {
                    return "no";
                }
                // 그러하지 않다면 즉, 짝이 맞다면 다음 짝을 찾으러 스택 비우기
                else {
                    stack.pop();
                }
            }
            // 닫는문자 ] 라면
            else if(c == ']') {
                // 스택에 [ 있는지 또는 스택이 비었는지 확인하고 그러하다면 no
                if(stack.empty() || stack.peek() != '[') {
                    return "no";
                }
                // 그러하지 않다면 즉, 짝이 맞다면 다음 짝을 찾으러 스택 비우기
                else {
                    stack.pop();
                }
            }
        }
        // 위 과정 후에 스택 비어있다면 짝이 맞는 것이기 때문에 yes
        if(stack.empty()) {
            return "yes";
        }
        // 위 과정 후에 스택에 뭔가 남아있다면 짝이 안맞는 것이기 때문에 no
        else {
            return "no";
        }
    }
}

 

느낀점

잔머리 굴리지 말자

스택은 해결해야 할 문제를 계속 쌓아둬서 확인할 수 있게 해주는 역할로 생각하자. 아주 쓸모있는 놈이다.

마지막에 스택이 비었는지도 확인하는 것도 포인트

 

문제 좀 잘 읽자 제발

온점이면 반복문 나가야 한다고!