Week 2 (자료 구조) - 문제 10828번 (스택)

2023. 7. 6. 19:59백준 문제와 소스 코드

문제:

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력:

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

 

출력:

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

 

예제 입력1:

예제 출력1:

예제 입력2:

예제 출력2:

코드:

#include <iostream>
#include<string>

using namespace std;

class Stack
{
private:
int size; //배열 크기
int number; //현재 들어간 개수
int* stack; //배열
public:

Stack() //생성자 함수
{
cin >> size; //크기 설정
stack = new int[size + 1]; //배열 생성
number = 0; //초기화
}

void push(int i) //넣는 함수
{
stack[number] = i; //초기화
number++; //갯수 증가
}

int pop() // 가장위에 있는 숫자 출력 및 하나 삭제 
{
if (number == 0) //스택에 자료가 하나도 없다면
return -1;
number--;
return stack[number]; //가장 위에꺼 출력
}

int Size() //들어있는 정수의 개수 출력
{
return number;
}

int empty() //비어있다면 1을 반환, 아니면 0을 반환
{
if (number == 0)
{
return 1;
}

else
{
return 0;
}
}

int top() //가장 위에 있는 숫자를 출력하는 함수
{
if (number == 0)
return -1;
return stack[number - 1];
}

int ret_size() { return size; }
};

int main()
{
Stack c1;
string str;
int temp;

for (int i = 1; i <= c1.ret_size(); i++)
{
cin >> str;

if (str == "pop")
{
cout<<c1.pop()<<endl;
}
else if (str == "size")
{
cout << c1.Size() << endl;
}
else if (str == "empty")
{
cout << c1.empty() << endl;
}
else if (str == "top")
{
cout << c1.top() << endl;
}
else //실수한 부분 push를 입력 받으면 굳이 뒤에꺼를 따로 나눌 필요 없음
{
cin >> temp;
c1.push(temp);
}
}

return 0;
}

 

설명:

주석 참고