[ ALGORITHM ]/[ 백 준 ]

[BAEKJOON] 10828번 스택

HiStar__ 2020. 7. 20. 13:39

문 제

 

소 스  코 드

#include <iostream>
#include <string>

constexpr int MAX_SIZE{ 10'000 };


class Stack {
private:
	int m_top;
	int m_size;
	int *index;

public:
	Stack() : m_top{ 0 }, m_size{ 0 }, index{ new int[MAX_SIZE] }{}
	~Stack() { delete[] index; }

	void Push(const int&);
	const int Pop();
	int Size() const;
	bool Empty() const;
	int Top() const;
};

void Stack::Push(const int& n) {
	index[m_size] = n;
	++m_size;
	m_top = n;
}

const int Stack::Pop() {
	if (0 == m_size) return -1;

	int temp = m_top;
	index[m_size - 1] = 0;
	--m_size;
	m_top = index[m_size - 1];
	return temp;
}

int Stack::Size() const {
	return m_size;
}

bool Stack::Empty() const {
	if (0 == m_size) return 1;
	else return 0;
}

int Stack::Top() const {
	if (0 == m_size) return -1;
	return m_top;
}

int main() {
	int N;
	std::cin >> N;

	Stack stack;
	std::string s;
	int t;

	for (int i = 0; i < N; ++i) {
		std::cin >> s;

		if ("push" == s) {
			std::cin >> t;
			stack.Push(t);
		}
		else if ("pop" == s)	std::cout << stack.Pop() << '\n';
		else if ("size" == s)	std::cout << stack.Size() << '\n';
		else if ("empty" == s)	std::cout << stack.Empty() << '\n';
		else if ("top" == s)	std::cout << stack.Top() << '\n';
	}


	return 0;
}

 

풀 이

 

  • 동적할당을 통하여 구현. 

  • Stack은, 가장 최근에 스택에 추가한 항목이 가장 먼저 나온다. ( Last In First Out )

 

출 력 값

 

 

문 제  출 처

문제 링크 : [ BAEKJOON ] : https://www.acmicpc.net/problem/10828

 

10828번: 스택

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

www.acmicpc.net

 

'[ ALGORITHM ] > [ 백 준 ]' 카테고리의 다른 글

[BAEKJOON] 9012번 괄호  (0) 2020.07.22
[BAEKJOON] 10773번 제로  (0) 2020.07.21
[BAEKJOON] 2004번 조합 0의 개수  (0) 2020.07.19
[BAEKJOON] 1676번 팩토리얼 0의 개수  (0) 2020.07.18
[BAEKJOON] 9375번 패션왕 신해빈  (0) 2020.07.17