제로베이스의 자료구조 과제 중 스택과 관련된 문제가 나와 공부하면서 내용을 정리해본다.

| 메서드 | 설 명 |
|---|---|
| boolean empty() | Stack이 비어있는지 참 or 거짓으로 알려준다. |
| Object peek() | Stack의 맨 위에 저장된 객체를 반환한다. (비어있는 경우 EmptyStackException이 발생한다.) |
| Object pop() | Stack의 맨 위에 저장된 객체를 추출한다. (비어있는 경우 EmptyStackException이 발생한다.) |
| Object push(Object item) | Stack에 객체(item)을 저장한다. |
| int search(Object o) | Stack에서 주어진 객체(o)를 찾아서 그 위치를 반환한다. 못찾으면 -1을 반환한다. (배열과 달리 1부터 시작) |
import java.util.*;
public class Main {
public static void main(String[] args) {
Stack st = new Stack();
String expression = "((3+5)*8-2)"; // "괄호가 일치합니다."
// String expression = "((3+5*8-2)"; // case 1 : "괄호가 일치하지 않습니다."
// String expression = "(3+5)*8-2)"; // case 2 : "[예외 발생] 괄호가 일치하지 않습니다."
try{
for (int i = 0; i < expression.length(); i++) {
char ch = expression.charAt(i);
if(ch == '('){ // 여는 괄호는 스택에 저장
st.push(ch + "");
} else if(ch == ')'){ // 닫는 괄호는 pop으로 스택에서 삭제
st.pop();
}
}
if (st.isEmpty()) { // 스택이 비어있으면 괄호가 맞다.
System.out.println("괄호가 일치합니다.");
} else {
System.out.println("괄호가 일치하지 않습니다.");
}
} catch (EmptyStackException e){
System.out.println("[예외발생] 괄호가 일치하지 않습니다.");
}
}
}
