10845: 큐

2022. 6. 24. 19:58C언어/백준

-Class2 : Silver4

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

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 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 size = 0;
	int front = 0;
	int back = -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);
			back += 1;
			stack[back] = v;
		}
		else if (!strcmp(a, "front")) {
			if (front > back) {
				printf("-1\n");
			}
			else {
				printf("%d\n", stack[front]);
			}
		}
		else if (!strcmp(a, "back")) {
			if (front > back) {
				printf("-1\n");
			}
			else {
				printf("%d\n", stack[back]);
			}
		}
		else if (!strcmp(a, "size")) {
			if (front > back) {
				printf("0\n");
			}
			else {
				printf("%d\n", back - front+1);
			}
		}
		else if (!strcmp(a, "empty")) {
			if (front > back) {
				printf("1\n");
			}
			else {
				printf("0\n");
			
			}
		}
		else if (!strcmp(a, "pop")) {
			if (front > back) {
				printf("-1\n");
			}
			else {
				printf("%d\n", stack[front]);
				stack[front] = 0;
				front += 1;
			}
		}
	}
}

 

-풀이

이 문제도 스택을 이용해서 푼다.

top을 -1로 잡고, front는 0으로 back은 -1로 잡고 마찬가지로 top도 -1로 잡는다. (front랑 back을 같은 위치에 두지 않는다)

for문과  if-else문을 이용해서 입력문에 따라 명령문을 출력한다.

'C언어 > 백준' 카테고리의 다른 글

1546: 평균  (0) 2022.07.09
10866: 덱  (0) 2022.06.24
10828: 스택  (0) 2022.06.24
10816: 숫자 카드 2  (0) 2022.06.18
2839: 설탕 배달  (0) 2022.06.18