문제
문제 설명 - stack의 기본적인 함수인 push, pop, size, empty, top을 구현하는 문제이다.
이번에는 Stack 라이브러리를 사용하지 않고, 직접 class로 stack을 구현해 문제를 풀어보았다.
Stack.h 코드
#include<iostream>
#pragma once
class Stack {
private:
int* arr;
int capacity;
int n;
int stack_top;
public:
Stack(int capacity);
bool empty();
int size();
int top();
void push(int data);
int pop();
};
Stack::Stack(int capacity) {
this->capacity = capacity;
arr = new int[capacity];
this->stack_top = this->n = 0;
}
bool Stack::empty() {
return (size() == 0);
}
int Stack::size() {
return n;
}
int Stack::top() {
if (empty()) return -1;
return arr[stack_top - 1];
}
void Stack::push(int data) {
if (size() == capacity) return;
arr[stack_top] = data;
stack_top = (stack_top + 1) % capacity;
n++;
}
int Stack::pop() {
if (empty()) return -1;
int temp = arr[stack_top - 1];
stack_top = (stack_top - 1) % capacity;
n--;
return temp;
}
동적 배열을 만들고, 스택을 초기화할 때 capacity를 받아 top과 n을 0으로 초기화시켜주었다.
그리고 top의 값을 바꿔가며 push와 pop을 수행해주었다.
28278.cpp 코드
#include<iostream>
#include"Stack.h"
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N, cmd;
cin >> N;
Stack stk(N);
for (int i = 0; i < N; i++) {
cin >> cmd;
if (cmd == 1) {
int a;
cin >> a;
stk.push(a);
}
else if (cmd == 2) {
cout << stk.pop() << "\n";
}
else if (cmd == 3) {
cout << stk.size() << "\n";
}
else if (cmd == 4) {
cout << stk.empty() << "\n";
}
else if (cmd == 5) {
cout << stk.top() << "\n";
}
else return 0;
}
return 0;
}
그리고 입력으로 커맨드가 들어왔을 때 각 커맨드에 맞는 함수를 수행시켜주었다.
느낀점
스택 라이브러리를 사용하면 아주 간단하게 풀리는 문제이지만, 직접 클래스로 구현해보니까 Stack이라는 자료구조가 어떻게 동작하는지를 잘 알 수 있었다. 그리고 Stack 라이브러리가 어떻게 만들어졌는지도 짐작할 수 있었다.
'개발 > 알고리즘' 카테고리의 다른 글
백준[1406] -에디터 (C++) (0) | 2023.08.19 |
---|---|
백준 [3273] - 두 수의 합 (C++) (0) | 2023.08.15 |