* 쉬움주의 *


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


백준저지에 등록되어있는 정말 간단한 스택만드는 문제이다.


그동안 코드짜면서 스택 또는 큐가 필요한 경우, 매번 새롭게 구현하여 사용했었는데, 라이브러리(STL)를 사용하는 법을 (부끄럽지만 이제서야) 해보았다.


----------------------------------------------------------------------------------------------------------------------------------------------------------------------

사용법은 그저,


#include<stack> // 를 선언해준 뒤,


stack<변수타입> s;  // 스택변수를 선언하고,


s.push(x) / s.pop() / s.top() 등등 기존 알려진 방식대로 사용하면 된다.


----------------------------------------------------------------------------------------------------------------------------------------------------------------------


문제 10828번의 솔루션)


(1) stack STL 사용


#include<iostream>

#include<string>

#include<stack>

using namespace std;



int main() {

stack<int> stack; // int형 자료형을 사용하는 스택변수 선언

int n;

cin >> n;

for (int i = 0; i < n; i++) {

string s;

cin >> s;

if (!s.compare("push")) {

int input;

cin >> input;

stack.push(input);

}

else if (!s.compare("top")) {

cout << (stack.empty() ? -1 : stack.top()) << '\n';

}

else if (!s.compare("size")) {

cout << stack.size() << '\n';

}

else if (!s.compare("empty")) {

cout << (stack.empty() ? 1 : 0) << '\n';

}

else if (!s.compare("pop")) {

cout << (stack.empty() ? -1 : stack.top()) << '\n';

if(!stack.empty()) stack.pop();

}

else {

cout << "invalid cmd" << '\n';

}

}

}



(2) STL을 사용하지 않은, 평소에 사용하던 코드(Node 구조체와 Stack 클래스 선언)


#include<iostream>

#include<string>

using namespace std;


struct Node {

int n;

Node* prev;

};

class Stack {

private:

int stackSize;

Node* stackTop;

public:

Stack();

void push(int x);

void pop();

void size();

void empty();

void top();

};

Stack::Stack() {

stackSize = 0;

stackTop = NULL;

}

void Stack::push(int x) {

Node* node = new Node;

node->n = x;

node->prev = stackTop;

stackTop = node;

stackSize++;

}

void Stack::pop() {

if (!stackSize) {

cout << -1 << '\n'; return;

}

cout << stackTop->n << '\n';

Node* temp = stackTop;

stackTop = stackTop->prev;

stackSize--;

delete temp;

}

void Stack::size() {

cout << (stackSize ? stackSize : 0) << '\n';

}

void Stack::empty() {

cout << (stackSize ? 0 : 1) << '\n';

}

void Stack::top() {

cout << (stackSize ? stackTop->n : -1) << '\n';

}


int main() {

Stack *stack = new Stack();

int n;

cin >> n;

for (int i = 0; i < n; i++) {

string s;

cin >> s;

if (!s.compare("push")) {

int input;

cin >> input;

stack->push(input);

}

else if (!s.compare("top")) {

stack->top();

}

else if (!s.compare("size")) {

stack->size();

}

else if (!s.compare("empty")) {

stack->empty();

}

else if (!s.compare("pop")) {

stack->pop();

}

else {

cout << "invalid cmd" << '\n';

}

}

}



+ Recent posts