백준 10828번 스택
생각 과정
위 문제를 해결하기 위해 기본적인 스택 구현 방법을 먼저 떠올렸다.
- 스택 구조체 구현하기, 2. 필요한 모듈 떠올리기
구현하는데 문제는 없었지만 하나의 걸림돌이 있었다.
처음에는 메모리 할당을 하는 init함수를 구현하지 않아서 Segmentation fault가 발생하였다.
세그멘테이션 오류는 프로그램이 허용되지 않은 메모리 영역에 접근을 시도하거나, 허용되지 않은 방법으로 메모리 영역에 접근을 시도할 경우 발생한다. -위키백과
관련 내용을 숙지한 후 초기화하고 사용하니 정상적으로 실행이 되었다.
오늘의 회고록(24.05.24)
- 구조체를 사용할 때 메모리 할당을 잘하자.
구현 내용
#include <iostream>
#include <cstring>
using namespace std;
struct stack{
int* arr;
int top;
int capacity;
};
static void init(stack &st, int size){
st.arr = new int[size];
st.top = -1;
st.capacity = size;
}
static void PUSH(stack &st, int n){
if(st.top < st.capacity - 1){
st.arr[++st.top] = n;
}else{
cout << "stack is full" <<"\n";
}
}
static int POP(stack &st){
if(st.top > -1){
int temp = 0;
temp = st.arr[st.top];
st.arr[st.top--] = 0;
return temp;
}else if(st.top == -1){
return -1;
}
}
static int SIZE(stack &st){
return st.top + 1;
}
static int EMPTY(stack &st){
return st.top == -1;
}
static int TOP(stack &st){
if(st.top >= 0){
return st.arr[st.top];
}else if(st.top == -1){
return -1;
}
}
int main(){
stack st;
int num = 0;
string inputString = "";
cin >> num;
init(st, num);
for(int i = 0; i < num; i++){
cin >> inputString;
if(inputString == "push"){
int N;
cin >> N;
PUSH(st, N);
}else if(inputString == "pop"){
int N = POP(st);
cout << N << "\n";
}else if(inputString == "size"){
int size = SIZE(st);
cout << size << "\n";
}else if(inputString == "empty"){
int empty = EMPTY(st);
cout << empty << "\n";
}else if(inputString == "top"){
int top = TOP(st);
cout << top << "\n";
}
}
return 0;
}
댓글남기기