Queue&Stack 문제 관련 최종 팀플-(백준 10773번, 백준 10845번)

채재헌·2022년 7월 21일
0

🎈1. 접근 방법


1-(1) Stack -백준 10773번 문제 - 제로

기존의 스택을 사용해서 입력 받을 정수 K를 입력 받고, K만큼 숫자를 입력 받아 0이면 pop 하고 0이 아니면push를 하는 기능들을 받아 메인 함수를 만들면 위와 같은 출력문을 출력할 수 있을것이라고 생각하였다.

링크 :링크텍스트


1-(2) Queue- 백준 10845번 - 큐

큐 ADT를 구현하고 주어진 출력문에 맞는 pop, empty push,ful,등 명령문을 처리해서 위와 같은 출력문을 출력한다.

링크 : 링크텍스트


🎆 2. 소스 코드


2-(1) Stack -백준 10773번 문제 - 제로

#include <iostream>
#include <stack>
using namespace std;

int main(void)
{
	int k, n;
	cin >> k;
	stack<int>s;
	for (int i = 0; i < k; i++)
	{
		cin >> n;
		if (n != 0) {
			s.push(n);
		}
		else {
			s.pop();
		}
	}

	int sum = 0;
	int size = s.size();
	for (int i = 0; i < size; i++)
	{
		sum += s.top();
		s.pop();
	}
	cout << sum;
	return 0;
}

2-(2) Queue- 백준 10845번 - 큐

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

int queue[10000];
int queue_size = 0;

void push(int push_data)
{
	queue[queue_size] = push_data;
	queue_size += 1;
}

int empty() {
	if (queue_size == 0) {
		return 1;
	}
	else {
		return 0;
	}
}

int pop()
{
	if (empty()) {
		return -1;
	}
	queue_size -= 1;
	return queue[0];
}

int front()
{
	if (empty()) {
		return -1;
	}
	return queue[queue_size - queue_size];
}

int back()
{
	if (empty()) {
		return -1;
	}
	return queue[queue_size - 1];
}

void setting()
{
	for (int i = 0; i < queue_size; i++) {
		queue[i] = queue[i + 1];
	}
}


int main(void)
{
	int N = 0, push_data = 0;
	char command[5] = { 0, };

	scanf("%d", &N);

	for (int i = 0; i < N; i++) {
		scanf("%s",command);

		if (!strcmp(command, "push")) {
			scanf("%d", push_data);
			push(push_data);
		}
		else if (!strcmp(command, "pop")) {
			printf("%d\n", pop());
			setting();
		}
		else if (!strcmp(command, "empty")) {
			printf("%d\n", empty());
			
		}
		else if (!strcmp(command, "size")) {
			printf("%d\n",queue_size);
			
		}
		else if (!strcmp(command, "front")) {
			printf("%d\n", front());
			
		}
		else if (!strcmp(command, "back")) {
			printf("%d\n", back());
			
		}
	}
	return 0;
}

🥇 3. 알고리즘


3-(1) Stack -백준 10773번 문제 - 제로

2) k 번 반복하는 반복문으로 k 개의 수를 받는다.

3) 이때 입력받은 수가 0이면 pop를 실행하고 0이 아니면 push를 실행한다.

4) 스택의 모든 값을 더한다.

5) cout << sum; // 총합을 출력한다.


3-(2) Queue- 백준 10845번 - 큐

1) cin >> N; // 정수 N을 입력받는다.

2) N 번 반복하는 반복문 내에서 조건문을 통해 명령어(push, pop 등)를 입력받는다.

  • push를 받을 경우 이후에 추가적으로 정수 X도 같이 입력받는다.

3) 입력받은 명령어에 따라 c++에서 미리 구현된 큐의 명령어를 실행시킨다.


🎉 4. 문제 통과 캡쳐화면

3-(1) Stack -백준 10773번 문제 - 제로


3-(2) Queue- 백준 10845번 - 큐


✨ 5. 느낌점

이번 퀴즈에서 큐와 스택에 관한 퀴즈를 풀어보았는데 먼저 스택에 관한 문제는 저번 수업 시간에 배운 C++을 활용한 스택 불러오기로 예전에 우리가 C로 스택을 직접 써서 구현하는 것보다 기존의 스택을 가져다 쓸 수 있는 편리함을 느끼게 되었다. 그리고 이번 스택을 구현하면서 스택에 구현의 원리를 더 자세히 알게 되었고, 큐 또한 마찬가지로 다시 한번 풀어보아서 기존의 개념을 다시 다지는 시간을 가지게 된 것 같다.


0개의 댓글