알고리즘/백준
백준 알고리즘 10828 - 스택
리그캣
2018. 1. 24. 14:50
문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N이 주어진다.
둘째 줄부터 N개의 명령이 하나씩 주어진다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #include <stdio.h> #include <string.h> #define MAX 10000 #define TRUE 1 #define FALSE 0 #define MINUS -1 typedef struct _stack { //스택 구조체 선언 int arr[MAX]; int top; } Stack; void StackInit(Stack *sp) { //스택 초기화 sp->top = -1; } int IsEmpty(Stack *sp) { //스택이 비웠는지 확인 if (sp->top == -1) return TRUE; return FALSE; } int IsFull(Stack *sp) { //스택이 꽉 차있는지 확인 if (sp->top + 1 >= MAX) return TRUE; return FALSE; } void push(Stack* sp,int data) { //push if (IsFull(sp) == TRUE) return; sp->arr[++(sp->top)] = data; } int pop(Stack* sp) { //pop if (IsEmpty(sp)) return MINUS; else //top이 가리키는 값을 반환 후 top을 하나 내림. return sp->arr[(sp->top)--]; } int size(Stack* sp) { //스택 사이즈 출력 return sp->top + 1; } int top(Stack* sp) { if (IsEmpty(sp)) return FALSE; return sp->arr[sp->top]; } int main() { int N,i,data; char str[6]; Stack stack; scanf_s("%d", &N); fgetc(stdin); StackInit(&stack); for (i = 0; i <= N; i++) { scanf_s("%s",str,sizeof(str)); fgetc(stdin); if (!strcmp(str, "push")) { scanf_s("%d",&data); fgetc(stdin); push(&stack, data); } else if (!strcmp(str, "pop")) { printf("%d",pop(&stack)); } else if (!strcmp(str, "size")) { printf("%d", size(&stack)); } else if (!strcmp(str, "empty")) { printf("%d", IsEmpty(&stack)); } else if (!strcmp(str, "top")) { printf("%d", top(&stack)); } } return 0; | cs |
참고 사이트 : http://blockdmask.tistory.com/96