[백준 BOJ] 10828번 스택 (C++/cpp)

2022. 2. 9. 15:48PS (Program Solving)/BOJ (백준)

문제 설명

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

 

10828번: 스택

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

www.acmicpc.net

백준 BOJ 10828번 스택 문제 사진
백준 BOJ 10828번 스택 문제 사진2

 

접근 방법 - 스택을 이용한 기본 문제

백준의 10828번 문제는 자료 구조 중 스택을 이용한 기본적인 문제이다.

해당 문제는 스택 구조에서 실행 가능한 행위를 모두 갖춘 프로그램을 만들어야 하는 문제이다.

C++에는 stack 라이브러리가 따로 존재해서, 필자는 이를 이용해 문제를 해결하였다.

스택을 직접 구현해서 해결하는 방법도 있지만, 필자는 stack 라이브러리를 직접 이용해 보고자 이 방법을 사용하였다.

필자는 아래처럼 코드를 작성하여 문제를 해결하였다.

스택의 구조에 대해 알고 있는 상태면 쉽게 풀 수 있지만, 그렇지 않다면 아래의 코드를 참고해보길 바란다.

 

후기

stack 라이브러리를 이용하면 해당 문제는 아주 손쉽게 풀 수 있는 문제이다.

하지만 위에서 작성해놓은 대로 스택을 직접 구현하여 해결하는 방법도 존재한다.

심지어, 스택을 공부하는 데에는 직접 구현하여 문제를 해결하는 것이 더 올바른 방향이기도 하다.

따라서 필자는 스택에 대하여 추가적으로 공부를 한 뒤, 다음에는 라이브러리 없이 스택 구조를 직접 구현하여 해당 문제를 다시 풀어보고자 한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#include <stack>
#include <string>
using namespace std;

//백준 10828번 코드
int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);	cout.tie(NULL);	//시간초과로 추가함
	stack<int> s;
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		string c;
		cin >> c;
		if (c == "push") {
			int num;	cin >> num;
			s.push(num);
		}
		else if (c == "pop") {
			if (s.empty()) { cout << "-1\n"; }
			else {
				cout << s.top() << "\n";
				s.pop();
			}
		}
		else if (c == "top") {
			if (s.empty()) { cout << "-1\n"; }
			else {
				cout << s.top() << "\n";
			}
		}
		else if (c == "size") {
			cout << s.size() << "\n";
		}
		else if (c == "empty") {
			if (s.empty()) { cout << "1\n"; }
			else { cout << "0\n"; }
		}
	}
}

 

제출 결과

백준 BOJ 10828번 스택 문제 C++ 제출 결과

(2021.12.31 백준 10828번 문제 제출 결과)

반응형