C언어/백준

10828: 스택

road23 2022. 6. 24. 19:44

-Class2 : Silver4

https://www.acmicpc.net/problem/10828

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

-결과

 

-코드

#include <stdio.h>
#include <string.h>
int main()
{
	int n, v;
	int top = -1;
	int stack[15000];
	char a[20];
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%s", a);
		//printf("str: %s\n", a);
		if (!strcmp(a, "push")) {
			scanf("%d", &v);
			top += 1;
			stack[top] = v;
		}
		else if (!strcmp(a, "pop")) {
			if (top == -1) {
				printf("-1\n");
			}
			else {
				printf("%d\n", stack[top]);
				stack[top] = 0;
				top -= 1;
			}
		}
		else if (!strcmp(a, "size")) {
			printf("%d\n", top+1);
		}
		else if (!strcmp(a, "empty")) {
			printf("%d\n", top == -1);
		}
		else if (!strcmp(a, "top")) {
			if (top == -1) {
				printf("-1\n");
			}
			else {
				printf("%d\n", stack[top]);
			}
		}
	}
}

 

-풀이

이 문제는 스택을 이용해서 푸는 문제이다.

시작할 때 top을 -1로 가정하고, 명령의 수인 N이 10000이하이므로 스택의 크기를 15000으로 잡는다.

for문으로 반복해서 명령문을 입력받고 if-else문을 이용해서 명령을 처리한다.