https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
알고리즘 분류 : 스택
문제
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
- push X: 정수 X를 스택에 넣는 연산이다.
- pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 스택에 들어있는 정수의 개수를 출력한다.
- empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
- top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
풀이
#include <stdio.h>
#define SIZE 10000
int arr[SIZE];
int top = 0;
int push(int x)
{
if (top >= SIZE) return 0;
arr[top++] = x;
return 1;
}
int pop()
{
if (top <= 0) return -1;
else return arr[--top];
}
int size() {
return top;
}
int empty() {
if (top == 0) return 1;
else return 0;
}
int get_top() {
if (top >= SIZE || top <= 0)
return -1;
return arr[top - 1];
}
int main(void) {
int n;
char command[10];
scanf_s("%d", &n); //주어지는 명령의 수
while (n > 0) {
n--;
scanf_s("%s", command, 10);
if (strcmp(command, "push") == 0) {
int num;
scanf_s("%d", &num);
int rlt = push(num);
if (rlt == -1)
printf("error\n");
}
else if (strcmp(command, "pop") == 0) {
printf("%d\n", pop());
}
else if (strcmp(command, "size") == 0) {
printf("%d\n", size());
}
else if (strcmp(command, "empty") == 0) {
printf("%d\n", empty());
}
else if (strcmp(command, "top") == 0) {
printf("%d\n", get_top());
}
}
}
'Algorithm > Problem Solving' 카테고리의 다른 글
[Programmers/Java] 완전탐색 level1 : 모의고사 (0) | 2022.02.11 |
---|---|
[BOJ/JAVA] 1924번 : 2007년 (0) | 2022.01.18 |
[BOJ/C] 3045 이중 연결 리스트 (0) | 2021.08.03 |
[BOJ/C] 4949 균형잡힌 세상 (0) | 2021.07.21 |
[BOJ/C] 2504 괄호의 값 (0) | 2021.07.21 |