코딩테스트/자료구조

[자료구조] 스택(Stack)

haenni 2024. 11. 17. 19:17

 

스택(Stack)은 후입선출(LIFO), 원칙을 따르는 자료구조입니다. 즉, 가장 나중에 들어온 데이터가 가장 먼저 나가는 구조입니다.

특징

  • LIFO 구조
    • 후입선출 구조로, 가장 나중에 들어온 데이터가 가장 먼저 나갑니다.
    • 예) 상자를 쌓아 올리고, 맨 위에서부터 차례로 꺼냄, 프링글스 과자
  • 한쪽 끝에서만 접근가능
    • 데이터를 삽입 & 제거할 때 항상 맨 위(Top)에서만 가능합니다.
  • 순서가 중요함
    • 데이터의 순서에 민감한 문제를 해결할 때 유용합니다.
    • 예) 짝 맞추기, 경로 탐색

💡 핵심 포인트

스택의 동작 원리에 대해 알아봅시다. 스택은 상자를 쌓는 것처럼 데이터를 위에서부터 차례로 쌓아 올리고(push), 나중에 쌓은 데이터를 맨 위에서부터 차례로 꺼내는(pop) 방식으로 동작합니다.

 

스택의 기본 연산

  • Stack 생성
    • 예시)
     import java.util.Stack;
     
     Stack<Integer> stack = new Stack<>();
    
  • Push
    • 데이터를 스택 맨 위에 추가합니다.
    • 예시)
    스택: [A, B]
    -> stack.push(C)
    -> [A, B, C]
    
  • Pop
    • 맨 위의 데이터를 삭제합니다.
    • 예시)
    스택: [A, B, C]
    -> stack.pop()  //가장 위의 데이터만 삭제할 수 있습니다.
    -> [A, B]
    
  • Peek
    • 맨 위의 데이터를 제거하지 않고 확인합니다.
    • 예시)
    스택: [A, B, C]
    -> stack.peek()
    -> C
    
  • isEmpty()
    • 스택이 비어있는지 확인합니다.
    • 예시)
    스택: [A, B, C]
    -> stack.isEmpty()
    -> false
    
    스택: []
    -> stack.isEmpty()
    -> true
    
  • search()
    • 인자 값을 스택에서 검색하여 우선순위를 출력합니다.
    • 인자 값으로 2를 주면 3번째로 출력되기때문에 3을 출력합니다.
    • 스택에 인자 값이 여러개라면 가장 높은 우선순위를 출력합니다.
    • 스택에 없는 값을 검색하면 -1을 출력합니다.
[스택]: 1, 2, 3, 1
-> stack.search(2)
-> 출력: 3
-> stack.search(1)
-> 출력: 4
-> stack.search(5)
-> 출력: -1

📜 코드 예시

java
# 코드 예시
public class Main {
	public static void main(String[] args){
		Stack<Integer> stack = new Stack<>();
		stack.push(1)
		stack.push(2)
		stack.push(0)
		
		System.out.println(stack.pop())  //0
		System.out.println(stack.pekk()) //2
		
		/* 이후 스택의 값 [1, 2] */
		
	}

}

📝 적용 문제

알고리즘/자료구조를 사용한 문제 예시와 간단한 설명

  • 문제: [12909] 올바른 괄호
  • 해결 방법: 괄호의 짝이 맞을 경우 true, 안 맞을 경우 false를 return하는 방식으로, 괄호가 담겨져있는 문자열 String을 for문을 통해 한 문자씩 Charactor로 변환하여 ‘(’일 경우 Stack에 추가(push) 해주었고, ‘)’일 경우 Stack에서 지워주었다(pop). 만약 ‘)’가 더 존재하는데 스택이 비어있다면 (stack.isEmpty()) false를 바로 반환해주었고, 반복문을 다 돌았을 때 스택이 비어있다면 짝이 맞는 것이고, 스택이 안비어있다면 짝이 맞지않는 것 이니 answer에 stack.isEmpty()를 담아 결과를 리턴해주었다.

✅ 학습 회고

스택에 대해 알아보는 시간을 가졌다. 자료구조의 지식이 많지 않아 항상 수 맞추기 등의 문제는 긴 코드로 하나하나 중첩 for문과 중첩 if문을 반복하여서 사용하여 코드가 더러워지고 알아보기 힘들었었는데 스택을 통해 관리하면 쉽게 문제를 풀 수 있다는 것을 깨달았다! 앞으로 사용 할 일이 많을 것 같으니 꾸준히 복습하자.

 

 


 

노션에서 작성 된 글이므로 내용에 누락이 있을 수 있습니다. 🙂

자세한 내용은 노션에서 확인해주세요.

http://hail-buttercup-c86.notion.site

 

Stack | Notion

🧠 알고리즘/자료구조 공부

hail-buttercup-c86.notion.site