전공/Problem Solving

[알고리즘/문제풀이/BOJ 18528번] 큐 2

caneo 2021. 7. 8. 10:07
728x90
반응형

큐 2 문제는 자료구조 큐를 활용하여 해결할 수 있는 문제이다. 자료구조 큐에 대한 학습을 하였다면 어려움없이 무난하게 풀 수 있는 문제이다. 큐에 대한 내용은 다음 링크에 확인할 수 있다.

2021.07.07 - [알고리즘/이론] - [알고리즘/이론]큐

 

[알고리즘/이론]큐

원소를 삽입할 때 Enqueue, 원소를 제거할 때 Dequeue를 한다. 큐는 FIFO(first in, first out, 선입선출)의 특성을 같는다. 큐는 머리(head)와 꼬리(tail)을 갖는 데, 원소는 꼬리로 삽입되고 머리에서 제거된다

ark-hive.tistory.com

구현할 때 주의할 점은  getchar 함수를 사용할 때 다음과 같이 괄호를 써주어야 한다는 점이다. 연산자의 우선순위규칙 때문에 비교연산이 우선 수행된 후 대입연산이 실행되기 때문이다. 또한 getchar를 사용할 때 마지막에는 EOF가 입력된다는 것을 주의해야 한다.

character = getchar != '\n' -------- x
(character = getchar) != '/n' ------ o

작성한 코드는 다음과 같다.


#include<stdio.h>
//http://ark-hive.tistory.com/
int N;
char character;
int x;

int queue[2000020];
int head;
int tail;

void push(int x) {
	queue[tail] = x;
	tail += 1;
	return;
}

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

	return;
}

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

	for(int i=0;i<N;i++){
		x = 0;
		character = getchar();
		if (character == 'p') {
			character = getchar();
			if (character == 'u') {
				while (getchar() != ' ');
				while (1) {
					if ((character = getchar()) == '\n') break;
					if (character == EOF) break;
					x *= 10;
					x += character - '0';
				}
				push(x);
			}
			else {
				pop();
				while ((character = getchar()) != '\n') {
					if (character == EOF)break;
				}
			}
		}
		else if (character == 's') {
			printf("%d\n", tail - head);
			while ((character = getchar()) != '\n') {
				if (character == EOF) break;
			}
		}
		else if (character == 'e') {
			if (head == tail)
				printf("%d\n", 1);
			else
				printf("%d\n", 0);
			while ((character = getchar()) != '\n') {
				if (character == EOF) break;
			}
		}
		else if (character == 'f') {
			if (head == tail) printf("%d\n", -1);
			else printf("%d\n", queue[head]);
			while ((character = getchar()) != '\n') {
				if (character == EOF) break;
			}
		}
		else if (character == 'b') {
			if (head == tail) printf("%d\n", -1);
			else printf("%d\n", queue[tail - 1]);
			while ((character = getchar()) != '\n') {
				if (character == EOF) break;
			}
		}
	}
	return 0;
}

문제의 지문은 다음의 링크에서 확인할 수 있다.

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

728x90
반응형