본문 바로가기
백준(C언어)/23년 4월

[C] 백준 - 18258번: 큐 2

by C0MPAS 2023. 4. 14.

4월 14일(금) - 큐, 덱 (18258번)

 

18258번: 큐 2

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

www.acmicpc.net

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

최초 생각 정리

- 작년 자료구조 강의 참고

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

문제점

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

풀이

(참고 -> https://dalconbox.tistory.com/52 )

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)

#include <stdio.h>
#include <string.h>

int queue[2000001];
int front = 0;
int rear = -1;

void init(char arr[])
{
	for (int i = 0; i < 10; i++)
	{
		arr[i] = '\0';
	}
}

void push(int x)
{
	queue[++rear] = x;
}

void pop()
{
	if (rear - front + 1 == 0)
	{
		printf("%d\n", -1);
	}
	else
	{
		printf("%d\n", queue[front++]);
	}
}

void size()
{
	printf("%d\n", rear - front + 1);
}

void empty()
{
	if (rear - front + 1 != 0)
	{
		printf("%d\n", 0);
	}
	else
	{
		printf("%d\n", 1);
	}
}

int main(void)
{
	int N;
	scanf("%d", &N);

	int x;
	char command[10];
	for (int i = 0; i < N; i++)
	{
		scanf("%s", command);
		if (!strcmp(command, "push"))
		{
			scanf("%d", &x);
			push(x);
		}
		else if (!strcmp(command, "pop"))
		{
			pop();
		}
		else if (!strcmp(command, "size"))
		{
			size();
		}
		else if (!strcmp(command, "empty"))
		{
			empty();
		}
		else if (!strcmp(command, "front"))
		{
			if (rear - front + 1 == 0)
			{
				printf("%d\n", -1);
			}
			else
			{
				printf("%d\n", queue[front]);
			}
		}
		else if (!strcmp(command, "back"))
		{
			if (rear - front + 1 == 0)
			{
				printf("%d\n", -1);
			}
			else
			{
				printf("%d\n", queue[rear]);
			}
		}
		init(command);

	}

	return 0;
}

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

댓글