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;
}
설명:
주석 참고
'백준 문제와 소스 코드' 카테고리의 다른 글
| Week 2 (자료 구조) - 문제 10773번 (제로) (0) | 2023.07.08 |
|---|---|
| Week 2 (자료 구조) - 문제 9021번 (괄호) (0) | 2023.07.06 |
| Week 1 (수학) - 문제 17087번 (숨바꼭질 6 ) (0) | 2023.07.01 |
| Week 1 (수학) - 문제 11653번 (소인수분해) (0) | 2023.06.30 |
| Week 1 (수학) - 문제 2609번 (최대공약수와 최소공배수) (0) | 2023.06.30 |