
[묘공단] 2주차 학습 기록(스택, 큐)알고리즘2024. 4. 22. 14:05
Table of Contents
2주차에는 스택과 큐에 대해서 학습했습니다.
이 역시 많이 본 주제이기 때문에 다시 정리해보는 관점으로 공부했습니다.
스택(Stack)
스택의 어원은 '쌓는다'이다.
스택은 접시를 쌓는 것처럼 하나하나 쌓아올린 자료구조를 뜻한다.
스택의 특징
- LIFO(후입선출)원칙을 따르는 선형 데이터구조이다.
- 접시 더미라고 생각하면, 최상단 접시만 꺼낼 수 있다.
- 작업
- push: 스택의 맨 위에 항목을 추가
- pop: 스택의 맨 위에서 항목을 제거하고 반환
- peek or top: 항목을 제거하지 않고 스택 맨 위에 있는 항목을 반환
- 함수 호출, 역추적 알고리즘, 표현식 평가(중위 -> 후위), 실행 취소 메커니즘과 같은 곳에서 사용된다.
스택 사용 예시
자바에서 스택 자료구조를 사용한 예시이다.
import java.util.Stack;
public class StackExample {
public static void main(String[] args) {
// 스택 생성
Stack<Integer> stack = new Stack<>();
// 스택이 비어있는 지 확인
System.out.println(stack.isEmpty());
// 스택에 요소 추가
stack.push(10);
stack.push(20);
stack.push(30);
// 스택의 가장 위 요소 보기
System.out.println(stack.peek()); // 30
// 스택 요소 꺼내기
System.out.println(stack.pop()); // 30
System.out.println(stack.pop()); // 20
}
}
큐(Queue)
큐도 스택과 마찬가지로 선형 데이터 구조이지만, FIFO(선입선출)원칙을 따른다는 차이가 있다.
큐의 특징
- FIFO(선입선출)원칙을 따르는 선형 데이터 구조
- 음식점의 줄과 비슷하다. 먼저 도착한 사람이 음식을 받는다.
- 작업
- Enqueue: 큐의 맨 뒤나 끝에 항목을 추가
- Dequeue: 큐의 앞이나 시작 부분에서 항목을 제거하고 반환
- Front: 큐의 맨 앞에 있는 항목을 제거하지 않고 반환
- Rear: 큐의 뒤쪽에 있는 항목을 제거하지 않고 반환
- 프로세스 예약, 너비 우선 검색 알고리즘, 비동기 데이터 처리와 같은 곳에서 사용된다.
큐 사용 예시
자바에서 큐 자료구조를 사용한 예시이다.
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// 큐 생성
Queue<String> queue = new LinkedList<>();
// 큐가 비어있는지 확인
System.out.println("Is the queue empty? " + queue.isEmpty());
// 큐에 요소 추가
queue.add("Alice");
queue.add("Bob");
queue.add("Charlie");
// 제일 앞 요소 확인(Front)
System.out.println(queue.peek()); // Alice
// 큐에서 요소 제거
System.out.println("Dequeued element: " + queue.remove()); // Alice
System.out.println("Dequeued element: " + queue.poll()); // Bob
// 큐에 요소 추가
queue.offer("David");
queue.offer("Eve");
// 추가 후 큐 확인
System.out.println("Queue after offering: " + queue); // [Charlie, David, Eve]
}
}
"코딩테스트 합격자되기-자바편"을 읽고 작성한 글입니다.
'알고리즘' 카테고리의 다른 글
| [백준] 10799 (0) | 2024.04.23 |
|---|---|
| [백준] 10773 (0) | 2024.04.22 |
| [묘공단] 1주차 학습 기록 (배열, ArrayList) (0) | 2024.04.21 |
| [프로그래머스] 올바른 괄호 (1) | 2024.04.19 |
| [프로그래머스] 실패율 (0) | 2024.04.18 |

@clapp :: Clap 개발블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!