문제출처: https://www.acmicpc.net/problem/10828
풀이
전형적인 스택 구현 문제입니다. 스택의 개념을 공부하고 이 문제로 복습하면 좋을 것 같습니다.
본 풀이는 c언어스타일로 구현하였고 9012번문제https://www.acmicpc.net/problem/9012는 c++로 구현했습니다.
코드
#pragma warning (disable:4996) #include<cstdio> #include<cstring> #define STACK_SIZE 10000 int stack[STACK_SIZE]; int top = -1; void push(int num); int is_full(); int is_empty(); int pop(); int count(); int peek(); int main() { int n; scanf("%d", &n); int num; char choice[6]; for (int i = 0; i < n; i++) { scanf("%s", choice); if (!strcmp(choice, "push")) { scanf("%d", &num); push(num); } else if (!strcmp(choice, "pop")) { if (top == -1) printf("-1\n"); else { printf("%d\n", pop()); } } else if (!strcmp(choice, "size")) { printf("%d\n", count()); } else if (!strcmp(choice, "empty")) { printf("%d\n", is_empty()); } else if (!strcmp(choice, "top")) { printf("%d\n", peek()); } } } void push(int num) { if (is_full()) return; else stack[++top] = num; } int is_full() { if (top == STACK_SIZE - 1) return 1; else return 0; } int is_empty() { if (top == -1) return 1; else return 0; } int pop() { if (is_empty()) return -1; else return stack[top--]; } int count() { if (is_empty()) return 0; else { return top + 1; } } int peek() { if (is_empty()) return -1; else return stack[top]; }
결과
'문제풀이(BOJ) > 스택' 카테고리의 다른 글
[백준 11899] 괄호 끼워넣기 (0) | 2020.01.08 |
---|---|
[백준 3986] 좋은 단어 (0) | 2019.12.08 |
[백준 9012] 괄호 (0) | 2019.12.03 |