개발자는 기록이 답이다

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_올바른 괄호_Stack) 본문

알고리즘/인프런 - Java알고리즘 입문

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비(Stack,Queue_올바른 괄호_Stack)

slow-walker 2023. 9. 30. 03:09

 

1. 올바른 괄호

 

예시 입력 1 

(()(()))(()

예시 출력 1

NO

 

강의 풀이(Time: 167ms Memory: 27MB)

 

중괄호든 대괄호든 괄호 문제는 십중팔구 Stack으로 풀어야 한다.

)(()) // 닫는 괄호가 더 많을때 예외처리 필요

)()( // 닫는 괄호 여는 괄호 개수가 똑같아도 )(는 올바른괄호가 아니기 때문에 예외처리 필요

(()() // 여는 괄호가 더 많을때 예외처리
import java.util.Scanner;
import java.util.Stack;

public class Main {
    public String solution(String str) {
        String answer = "YES";
        Stack<Character> stack = new Stack<>();
        for (Character x : str.toCharArray()) {
            if (x == '(') stack.push(x);
            else {
                // 닫는 괄호 일때 stack이 비어있으면 NO
                if (stack.isEmpty()) return  "NO";
                // 비어있지 않으면 '(' 빼내기
                stack.pop();
            }
        }
        if (!stack.isEmpty()) return "NO";
        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        String str = kb.next();
        System.out.println(T.solution(str));
    }
}