스택 알고리즘의 기본 개념
- 스택의 정의:
- 후입선출(LIFO) 방식으로 동작하는 자료 구조.
- 가장 나중에 삽입된 데이터가 가장 먼저 제거됨.
- 기본 연산:
- Push: 스택의 맨 위에 데이터를 추가합니다.
- Pop: 스택의 맨 위 데이터를 제거하고 반환합니다.
- Peek/Top: 스택의 맨 위 데이터를 제거하지 않고 반환합니다.
- isEmpty: 스택이 비어 있는지 확인합니다.
스택의 활용 사례
프론트엔드 개발에서 스택을 활용하는 몇 가지 대표적인 사례를 살펴보겠습니다.
- 브라우저의 뒤로 가기/앞으로 가기 기능:
- 방문한 페이지의 URL을 스택에 저장하고, "뒤로 가기"를 누르면 Pop 연산을 사용하여 이전 페이지로 이동합니다.
- 괄호의 유효성 검사:
- 코드 에디터나 웹 폼에서 괄호의 짝을 맞추기 위해 스택을 사용합니다.
- 문자열 역순 변환:
- 문자열을 뒤집기 위해 스택을 사용할 수 있습니다.
function reverseString(str) {
const stack = [];
for (let i = 0; i < str.length; i++) {
stack.push(str[i]);
}
let reversed = '';
while (stack.length > 0) {
reversed += stack.pop();
}
return reversed;
}
자바스크립트 예시
class Stack {
constructor() {
this.items = [];
}
// 스택에 원소를 추가합니다.
push(element) {
this.items.push(element);
}
// 스택에서 원소를 제거하고 반환합니다.
pop() {
if (this.isEmpty()) {
return "Stack is empty";
}
return this.items.pop();
}
// 스택의 맨 위에 있는 원소를 반환합니다.
peek() {
if (this.isEmpty()) {
return "Stack is empty";
}
return this.items[this.items.length - 1];
}
// 스택이 비어있는지 확인합니다.
isEmpty() {
return this.items.length === 0;
}
// 스택의 원소 수를 반환합니다.
size() {
return this.items.length;
}
// 스택을 비웁니다.
clear() {
this.items = [];
}
// 스택의 모든 원소를 문자열로 변환합니다.
print() {
return this.items.toString();
}
}
// 스택 사용 예시
const stack = new Stack();
'CS > Data Structure' 카테고리의 다른 글
해시테이블 (Hash Table) (0) | 2024.07.01 |
---|---|
덱 (Deque) (0) | 2024.06.30 |
큐 (Queue) (0) | 2024.06.25 |
연결 리스트 (Linked List) (0) | 2024.06.23 |
배열 (Array) (0) | 2024.06.23 |