공구일 2025. 6. 20. 16:57
728x90

🔍자바 : 스택/큐 . 올바른 괄호

 

01. 코드 기획 단계 

- 스택을 이용하여 괄호의 쌍을 이루는 것을 확인할 것입니다. -> (->(->)..이게 들어왔을 때는 이전에 들어온 괄호를 제거해주는 방식으로 진행합니다. => 들어온 값이 ')'인 경우에는 스택의 최상위값을 peek()해봐야합니다. 이때 stack이 비어있거나 '('가 최상위값이 아니면(사실상 이 코드에서 불가능한 값) return false를 해주어 런타임에러 발생을 막아줘야합니다.

 

02. 코드 실행 및 오류 잡기

import java.util.*;

class Solution {
    boolean solution(String s) {
        boolean answer = false;
        Stack<Character> stack = new Stack<>();
        
        for(char c : s.toCharArray()){
            if(c == '(') stack.push('(');
            else if(c == ')') {
                if(stack.empty() || stack.peek() != '(') return false;
                stack.pop();
            }
        }
        
        if(stack.empty()) answer = true;
        return answer;
    }
}

 

03. 정리

- Stack<E> 클래스는 Vector를 상속한 LIFO 자료구조로, push(item), pop(), peek(), empty() 등을 메서드로 가집니다.

 

- 문자열을 문자 배열처럼 다루기위해서는 .toCharArray()를 해줘야합니다. 만약에 문자열 중 문자에 접근할 때는 chatAt(인덱스)로 접근해주면 됩니다.

 

- 컴파일 에러와 런타임 에러:

컴파일 에러(Compile-time Error) : 코드를 컴파일(번역)할 때 발생하는 에러 -> JVM 실행 전에 에러 발생하는 것이기 때문에 코드 실행 자체가 안됩니다. 문법 오류나 타입 불일치 등이 있습니다.

런타임 에러(Runtime Error) : 코드의 컴파일은 잘 됐지만 실행 도중에 발생하는 예외/오류를 의미합니다. null 참조, 배열 범위 초과 등이 있으며, try-catch를 통해 예외처리 해줄 수 있습니다.

728x90