ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Stack 활용해보기
    Java/자바의정석 2023. 2. 27. 16:36
    반응형

    Stack활용의 예시

    • 수식계산,
    • 수식괄호 검사
    • 웨드프로세서의 undo/redo
    • 웹 브라우저의 앞으로가기/뒤로가기

    Queue활용의 예시

    • 최근 사용 문서 확인
    • 인쇄작업 대기목록
    • Buffer

    위와같이 활용의 예시들이 있는데 그 외에도 수많은 예들이 있다.

    우선 이번에는 수식괄호검사를 활용해보자.

    package JavaChap11;
    
    import java.util.*;
    
    public class Ex11_3 {
        public static void main(String[] args) { 
        
            Stack st = new Stack();
            String expression = "((3+5)*8-2)"; //args[0];
            System.out.println("expression:" + expression);
    
            try {
                for (int i = 0; i < expression.length(); i++) {
                    char ch = expression.charAt(i); //한글자씩 꺼낸다
    
                    if (ch == '(') { //여는괄호라면 push
                        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("괄호가 일치하지 않습니다.");
            } 
        }
    }

    ===============실행결과==================

    expression:((3+5)*8-2)
    괄호가 일치합니다.


    Stack st = new Stack();
    String expression = "((3+5)*8-2)";

    Stack을 사용하기 위해 객체를 구현한뒤 계산할 수식을 입력한다.

    for (int i = 0; i < expression.length(); i++) {
        char ch = expression.charAt(i);
    
        if (ch == '(') { //여는괄호라면 push
            st.push(ch + "");
        } else if (ch == ')') { //닫는괄호라면 pop
            st.pop();
        }
    }

    for문을 사용하여 입력받은 수식의 길이만큼 동작을 수행하는데

    ( 여는 괄호가 있다면 Stack에  push를 한다. 우리가 입력받은 수식이 ((3+5) * 8 -2) 이기때문에

    ( (

    이와같이 ( 가 push가 되어지고

    ) 닫는 괄호가 나온다면 해당 Stack에서 pop 을 시킨다

    입력받은 수식에서 ) 닫는괄호가 2개이므로 pop을 시켜 다시 빈배열이 되어진다.

     

    if (st.isEmpty()) {
        System.out.println("괄호가 일치합니다.");
    } else {
        System.out.println("괄호가 일치하지 않습니다.");
    }

    이와같이 Stack이 비어있다면 괄호가 일치함으로 판단

    비어있지않다면 괄호의 갯수가 일치하지 않는다는 문구를 노출시켜준다.

     

    try~ catch의 경우

    Stack이 비어있는데 pop을 하는 경우 에러가 발생하기 때문에 사용해주었다.

    반응형

    'Java > 자바의정석' 카테고리의 다른 글

    자바 Iterator란?  (0) 2023.02.27
    자바 Queue 활용해보기  (0) 2023.02.27
    LinkedList와 ArrayList의 차이  (0) 2023.02.27
    Java ArrayList의 개념 및 메서드  (0) 2023.02.27
    Java Collection이란?  (0) 2023.02.27

    댓글

Designed by Tistory.