풀이1 (내풀이)
- 공백 포함 문자열을 입력받기 위해서 getline(cin,s ,"\n") 함수를 사용하였다.
- 입력을 한번에 받고 한번에 출력하기 위해 Stack 클래스 내에 멤버로 string s를 설정하였다.
#include <iostream>
#include <vector>
#include <string>
#include <istream>
using namespace std;
class Stack {
int to;
int data[10000];
//출력
string s;
public:
Stack() { to = -1; }
~Stack() {}
void empty() {
if (to == -1)
s += "1\n";
else
s += "0\n";
}
int isFull() { return to == 9999; }
void push(int e)
{
if (isFull())
{
s += "It's Full\n";
exit(1);
}
data[++to] = e;
}
void pop()
{
if (to != -1) { s += to_string(data[to--]); s+= "\n"; }
else
s+= "-1\n";
}
void size()
{
s+= to_string(to + 1)+"\n";
}
void print()
{
cout << s;
}
void top()
{
if (to != -1) { s += to_string(data[to]); s += "\n"; }
else
s += "-1\n";
}
};
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n;
Stack stack;
//입력
cin >> n;
for (int i = 0; i <= n; i++)
{
string s;
getline(cin,s,'\n');
if (s.substr(0,4) == "push") //push 명령어인지 판단
{
stack.push(stoi(s.substr(5)));
}
else if (s.substr(0,3) == "pop") //pop 명령어인지 판단
{
stack.pop();
}
else if (s.substr(0,4) == "size") //size 명령어인지 판단
{
stack.size();
}
else if (s.substr(0, 3) == "top")
{
stack.top();
}
else if (s.substr(0, 5) == "empty")
{
stack.empty();
}
}
//결과값 출력
stack.print();
return 0;
}
코드를 짤때, 처음엔 명령어를 판단하는 부분의 if 조건에 s.find("pop") != string::npos 라 하였는데 요 코드도 가능하다.
풀이2(다른 사람)
- 그런데, "출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다." 해도 됬나보다...
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> s; // 스택
int N; // 명령의 수
string command; // 명령어
int num; // push 연산 시, 스택에 넣을 정수
int result = 0; // 각 명령어의 결과값
cin >> N;
for (int i = 0; i < N; i++) {
cin >> command;
// 1. push
if (command == "push") {
cin >> num;
s.push(num);
}
// 2. pop
// 스택이 비어있으면 -1을 출력, 그 외에는 top 값을 출력 후 pop
else if (command == "pop") {
if (s.size() == 0) {
result = -1;
cout << result << endl;
}
else {
result = s.top();
cout << result << endl;
s.pop();
}
}
// 3. size
else if (command == "size") {
cout << s.size() << endl;
}
// 4. empty
// size함수를 통해, size가 0이면 스택이 빈 것이므로 1, 아니면 0 출력
else if (command == "empty") {
if (s.size() == 0) {
result = 1;
cout << result << endl;
}
else {
result = 0;
cout << result << endl;
}
}
// 5. top
// 스택이 비어있으면 -1을 출력, 그 외에는 top 값을 출력
else if (command == "top") {
if (s.size() == 0) {
result = -1;
cout << result << endl;
}
else {
result = s.top();
cout << result << endl;
}
}
}
return 0;
}
'전공 > 알고리즘(algorithm)' 카테고리의 다른 글
[C++] 백준(BOJ) 10799 쇠막대기 (0) | 2024.01.10 |
---|---|
[C++] 백준(BOJ) 9012 괄호 (VPS-Valid Parenthesis String) (0) | 2024.01.09 |
[C++] 자료구조 : 스택 정리 (0) | 2024.01.08 |
[C++] 백준(BOJ) 10798 세로읽기 (0) | 2024.01.05 |
[C++] 백준(BOJ) 25206 너의 평점은 (2) | 2024.01.05 |