본문 바로가기

Study/코딩스터디_TIL

[JAVA 스터디] Stack 개념과 사용법

 

Stack이란?

"스택을 쌓는다" 라는 표현을 실생활에서도 간간히 사용하기 때문에,
큐와는 다르게 그나마 기억하기가 편한 것 같습니다.
자료구조의 일종으로서 큐(Queue)와는 다르게 후입선출의 형식입니다. - LIFO(Last In First Out)
나중에 들어오는 값이 가장 먼저 나가는 것으로,
큐와는 다르게 Index의 개념이 존재합니다.

큐보다 실생활에 적용, 비유되는 부분이 많습니다.
쓰레기통...바구니...벽돌쌓기...등등

깊이우선탐색(DFS)에서 사용되기도 하며, 재귀함수에도 많이 사용됩니다.

 

 

 

Stack<Integer> stack = new Stack<Integer>();

Stack<객체> 변수명 = new Stack<객체>();
큐와는 달리 Stack만을 Import하여 사용합니다.

⚙️ Stack에 값을 추가하는 방법(add와 push의 차이점)

stack.pust(i);
stack.add(i);
  • Stack변수.push(값);
  • Stack변수.add(값);
    2가지 방법이 있으며, 과정은 비슷하나 결과가 다릅니다.

⚙️ Stack 값 출력

stack.peek();

Stack변수.peek();
이렇게 사용할 경우 현재 Stack의 가장 마지막에 들어간 값, 가장 먼저 출력될 값이 출력되게 됩니다.
큐와 동일하게 Stack이 비어있을 경우 null을 return하기 때문에, 조건식에서도 사용됩니다.

⚙️ Stack 값 삭제(출력)

stack.pop();
stack.clear();
stack.remove(i);
  • Stack변수.pop();
  • Stack변수.clear();
  • Stack변수.remove(i);
    와 같이 사용할 수 있으며, 각각의 차이를 확인해보겠습니다.

clear - Stack을 전체 비움

pop - 튀어나온다는 영어해석처럼 가장 먼저 출력할 대상을 삭제하며, 출력합니다.
= 가장 나중에 넣은 값, 가장 끝의 index

remove - remove는 index를 주지 않을 경우 pop과 동일하게 가장 먼저 출력할 대상을 삭제하고,
파라미터로 index를 줄 경우 해당 index에 해당하는 값을 삭제합니다.(해당 값 출력X)

 

 

문제 java 10828 스택 

 

import java.util.Scanner;
public class Main {
 
	public static int[] stack;
	public static int size = 0;
 
 
	public static void main(String[] args) {
 
		Scanner in = new Scanner(System.in);
		StringBuilder sb = new StringBuilder();
		
		int N = in.nextInt();
 
		stack = new int[N];
		
		for(int i = 0; i < N; i++) {
        
			String str = in.next();
 
			switch (str) {
            
			case "push":
				push(in.nextInt());
				break;
                
			case "pop":
				sb.append(pop()).append('\n');
				break;
                
			case "size":
				sb.append(size()).append('\n');
				break;
                
			case "empty":
				sb.append(empty()).append('\n');
				break;
                
			case "top":
				sb.append(top()).append('\n');
				break;
			}
 
		}
		System.out.println(sb);
	}
 
	public static void push(int item) {
		stack[size] = item;
		size++;
	}
    
	public static int pop() {
		if(size == 0) {
			return -1;
		}
		else {
			int res = stack[size - 1];
			stack[size - 1] = 0;
			size--;
			return res;
		}
	}
    
	public static int size() {
		return size;
	}
    
	public static int empty() {
		if(size == 0) {
			return 1;
		}
		else {
			return 0;
		}
	}
    
	public static int top() {
		if(size == 0) {
			return -1;
		}
		else {
			return stack[size - 1];
		}
	}
	
}
728x90