본문 바로가기
코딩테스트 준비/백준

[백준/BOJ][C++] 28278번 스택 2

by 스테디코디스트 2023. 8. 19.
반응형

<문제 소개>


<소스 코드>

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
#include <unordered_map>
#include <set>
#include <cmath>
#include <list>
#include <stack>
#include <queue>
#include <algorithm>
using namespace std;
	
struct Stack
{
private:
	int Top;
	int* elements;

public:
	Stack(int N)
	{
		elements = new int[N];
		Top = -1;
	}

	~Stack() {};

	void push(int n) // 1
	{
		elements[++Top] = n;
	}

	int pop() // 2
	{
		if (!isEmpty())
		{
			return elements[Top--];
		}
		else
		{
			return -1;
		}
	}

	int Length() // 3
	{
		return Top + 1;
	}

	bool isEmpty() // 4
	{
		if (Top == -1) return true;
		else return false;
	}

	int top() // 5
	{
		if (!isEmpty())
		{
			return elements[Top];
		}
		else
		{
			return -1;
		}
	}
};

int main()
{
	// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N;
	cin >> N;

	Stack stack(N);
	
	for (int i = 0; i < N; i++)
	{
		int x;
		cin >> x;

		switch (x)
		{
		case 1:
			int n;
			cin >> n;
			stack.push(n);
			break;
		case 2:
			cout << stack.pop() << '\n';
			break;
		case 3:
			cout << stack.Length() << "\n";
			break;
		case 4:
			cout << stack.isEmpty() << "\n";
			break;
		case 5:
			cout << stack.top() << '\n';
			break;
		}
	}

	return 0;
}

<풀이과정>

1. struct로 Stack 선언

2. private으로 맨 위의 인덱스 값을 저장할 Top과 각 원소들을 담을 배열을 가리킬 포인터 elements로 선언

3. public을 이용해 함수들을 선언한다.

4. 생성자 Stack(int N)

- 구조체 선언시 elements를 크기가 N인 배열을 가리키게 하고, Top을 -1로 초기화시킴

5. push(int n)

- 배열 elements의 Top을 1증가시킨 인덱스에 접근하여 원소 n을 저장

6. pop()

- 스택이 비어있지 않은 경우 elements의 Top번째 원소를 리턴하고 Top을 1감소 시킴

- 비어있는 경우에는 -1 리턴

7. Length()

- 스택의 길이 Top + 1 을 리턴

8. isEmpty()

- Top이 -1인 경우에 true 리턴, 그 외에는 false 리턴

9. top()

- 스택이 비어있지 않은 경우 elements의 Top번째 원소만 리턴(Top 감소x)

- 비어있는 경우에는 -1 리턴

 

10. main 함수 진행

11. N을 입력 받고, 위에서 선언한 구조체 stack을 생성함 이때 생성자를 이용해 스택의 크기를 N으로 선언

12. N만큼 반복하며 함수의 번호 x를 입력받고 switch문을 이용해 x에 따라 함수를 실행

13. x가 1인 경우에는 n을 입력받아 스택에 push해주고 그 외에는 번호에 맞는 함수를 출력해줌


<코멘트>

스택을 직접 구현하여 문제를 풀어보았다!

배열의 크기를 어떻게 설정할지 몰라서 찾아보니 포인터를 이용하여 선언 후, 생성자를 통해 초기화 시켜주는 방법이 있었다.


<제출결과>