백준 스택 구현 문제 - 10828
배열로 풀기
#include<stdio.h>
#include<string.h>
int main(void){
int N = 0;
unsigned int size = 0;
int stack[10000] = {0};
char cmd[6] = {0};
int item = 0;
scanf("%d\n",&N);
for(int i =0; i<N; i++){
scanf("%s",cmd);
//pop
if(strcmp(cmd, "pop") == 0){
if(size == 0){
printf("-1\n");
continue;
}
printf("%d\n",stack[size-1]);
size--;
}
//push
else if(strcmp(cmd, "push") == 0){
scanf("%d\n", &item);
stack[size] = item;
size++;
}
//top
else if(strcmp(cmd, "top") == 0){
if(size == 0){
printf("-1\n");
continue;
}
printf("%d\n",stack[size-1]);
}
//empty
else if(strcmp(cmd, "empty") == 0){
printf("%d\n", size == 0); // 스택이 비어있으면 1, 아니면 0을 출력한다.
}
else{
printf("%d\n",size);
}
}
return 0;
}
구조체에 배열을 넣어서 풀기
#include<stdio.h>
#include<string.h>
#define MAX_STACK_SIZE 100
typedef int element;
typedef struct {
element stack[MAX_STACK_SIZE];
int top;
}StackType;
// 스택 초기화 함수
void init(StackType *s){
s->top = -1;
}
//empty
int is_empty(StackType *s)
{
return (s->top == -1);
}
// full
int is_full(StackType *s)
{
return (s->top ==(MAX_STACK_SIZE-1));
}
// push
void push(StackType *s,element item){
if(is_full(s))
{
fprintf(stderr,"스택 포화 에러\n");
return;
}
else s->stack[++(s->top)] = item;
//top 증가를 먼저 시켜준뒤 인자로 넘겨준다
}
// delete 함수
element pop(StackType *s)
{
if(is_empty(s)){
fprintf(stderr,"스택 공백 에러\n");
exit(1);
}
else return s->stack[(s->top)--];
//인자로 넘겨준 뒤 감소
}
//size
int size(StackType *s){
return s->top +1;
}
// peek함수
element peek(StackType *s)
{
if(is_empty(s)){
fprintf(stderr,"스택 공백 에러\n");
exit(1);
}
else return s->stack[s->top];
}
int main(void){
StackType s;
init(&s);
int i ;
char str[6];
int n, num;
scanf("%d", &n);
for(i=0; i<n; i++){
scanf("%s",str);
if(!strcmp(str,"push")) // strcmp 같으면 0 반환
{
scanf("%d",&num);
push(&s,num);
}else if(!strcmp(str,"pop")){
printf("%d\n",pop(&s));
}else if(!strcmp(str,"empty")){
printf("%d\n",is_empty(&s));
}else if(!strcmp(str,"size")){
printf("%d\n",size(&s));
}else if(!strcmp(str,"top")){
printf("%d\n",peek(&s));
}
}
return 0;
}
참고자료
[백준 온라인 코딩 스터디] (https://www.acmicpc.net/)
스택 -> 배열로 푼 블로그
https://jaejin0me.github.io/post/algo32/
http://jwprogramming.tistory.com/141