컴퓨터 공학 기초/알고리즘 ( algorithm )
Stack 을 이용한 알고리즘
JongSeok_12
2020. 4. 13. 13:20
이번 포스트에서는 스텍 자료구조를 활용하여 문제를 해결한다.
스텍의 특성은 선입후출의 특성을 가지고 있다.
문제 1. 스텍 구현
https://www.acmicpc.net/problem/10828
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
www.acmicpc.net
해결
// Data_struct_c+.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//
#include <iostream>
#include <istream>
#include <string>
using namespace std;
class STACK{
// 스텍 자료구조를 구현할 배열 stack_list 선언
// 크기 : 10,000
private:
int *stack_list;
int nData = 0;
int cnt = 0;
// 스텍을 사용하기 위한 인터페이스
// push, pop, size, empty, top 매서드 정의
public:
STACK(){
stack_list = new int[10000];
}
~STACK(){
delete[] stack_list;
}
// 값 추가
void push(){
cin >> stack_list[cnt];
++cnt;
}
// 값 꺼내오기
void pop(){
if (cnt == 0){
cout << -1 << endl;
return;
}
else{
--cnt;
cout << stack_list[cnt] << endl;
}
}
// 스택 안의 값 갯수 확인
void size(){
cout << cnt << endl;
}
// 스택이 비엇는지 확인
void empty(){
if (cnt == 0){
cout << 1 << endl;
}
else{
cout << 0 << endl;
}
}
// 스택 가장 위의 값 확인
void top(){
if(cnt == 0){
cout << -1 << endl;
}
else{
cout << stack_list[cnt-1] << endl;
}
}
};
int main()
{
int n = 0;
string cmd;
STACK stack;
cin >> n;
for (int i = 0; i < n; ++i){
cin >> cmd;
if (cmd == "push"){
stack.push();
}
else if (cmd == "pop"){
stack.pop();
}
else if (cmd == "size"){
stack.size();
}
else if (cmd == "empty"){
stack.empty();
}
else if (cmd == "top"){
stack.top();
}
}
}
+ 문자열은 string 컨테이너로 받을 수 있으며 비교할 때 if (cmd == "push") 와 같이 바로 모든 문자열 비교 가능