-์คํ์ด๋ ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
-ํ ์ชฝ ๋์์๋ง ์๋ฃ๋ฅผ ๋ฃ๊ณ , ๋บผ ์ ์๋ค.
-๊ฐ์ฅ ๋ง์ง๋ง์ ๋ฃ์ ์๋ฃ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋น ์ง๋ค.(FILO(First In Last Out)/LIFO(Last In First Out))
-๋ฐ์ดํฐ๋ฅผ ๋ฃ๋ ์์ ์ push, ๋นผ๋ ์์ ์ pop์ด๋ผ ํ๋ค.
-์ฝ๊ฒ ์๊ฐํ์ ๋ ํ์ชฝ์ด ๋งํ ์ํต์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
์คํ์ LIFO(Last In First Out) ํํ๋ฅผ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ์ต๊ทผ์ ์ถ๊ฐํ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋๋ค.
-push(item): item ํ๋๋ฅผ ์คํ์ ๊ฐ์ฅ ์๋ถ๋ถ์ ๋ฃ๋๋ค.
-pop(): ์คํ์์ ๊ฐ์ฅ ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ค.
์ถ์ฒ https://monsieursongsong.tistory.com/4
-top(): ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด์จ(์คํ์์ ๊ฐ์ฅ ์์ ์๋) ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๋ค.
-size(): ์คํ์ ๋ช๊ฐ์ ์๋ฃ๊ฐ ๋ค์ด๊ฐ ์๋์ง ํ์ธํ๋ค.
-empty(): ์คํ์ด ๋น์ด์๋์ง, ์๋์ง ํ์ธํ๋ค.(์ด ๋ ๋น์ด์์ผ๋ฉด 1์ ๋ฐํ, ๋น์ด์์ง ์์ผ๋ฉด 0์ ๋ฐํ)
์คํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌํํ๋๋ฐ๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
๊ทธ ์ค ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ฐฐ์ด(array)์ ์ด์ฉํ์ฌ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์์ ์ฒจ๋ถ๋ ์ฌ์ง์ ๋ณด๋ฉด ์๊ฒ ์ง๋ง ์คํ์ ๊ธฐ์ธ์ด๋ฉด ๋ฐฐ์ด๊ณผ ๋น์ทํ ํํ๊ฐ ๋๋ค. ์ด๋ฅผ ์ด์ฉํ์ฌ ๋ฐฐ์ด์ ์คํ์ผ๋ก ๋ง๋ค ๊ฒ์ด๋ค.
๊ตฌํํ ๋ ํ์ํ ๊ฒ: ๋ฐฐ์ด(+์ต๋ํฌ๊ธฐ), top๋ณ์(๋ฐ์ ์ฝ๋์์๋ topํจ์๊ฐ ์์ผ๋ฏ๋ก idx๋ผ๋ ์ด๋ฆ์ ๋ณ์๋ก ์ฌ์ฉ), ๊ฐ์ข ํจ์
์๋ ์ฝ๋๋ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ์คํ์ ๊ตฌํํ ์ด๋ค.
#include <stdio.h>
#include <string.h>
int idx = 0; //์์์ ๋งํ top๋ณ์
int stack[10002]; //๋ฐฐ์ด์ ํฌ๊ธฐ๋ ์คํ์ ์ต๋ ์ฉ๋๋งํผ ์ก์์ค์ผํ๋ค.
void push(int n) {
stack[idx++] = n;
return;
}
void pop() {
if (idx != 0)
printf("%d\n", stack[--idx]);
else
printf("-1\n");
return;
}
void top() {
if (idx != 0)
printf("%d\n", stack[idx - 1]);
else
printf("-1\n");
}
void empty() {
if (idx == 0)
printf("1\n");
else
printf("0\n");
}
int main() {
int N, data;
char order[8];
scanf("%d", &N);
while (N--) {
scanf("%s", order);
if (strcmp(order, "push") == 0) {
scanf("%d", &data);
push(data);
}
else if (strcmp(order, "pop") == 0) {
pop();
}
else if (strcmp(order, "size") == 0)
printf("%d\n", idx);
else if (strcmp(order, "top") == 0)
top();
else if (strcmp(order, "empty") == 0)
empty();
}
}p.s. pop()ํจ์์์ data๋ฅผ ๋บ ๋ ๊ตณ์ด ๋ฐฐ์ด์์ data๋ฅผ ์ ๊ฑฐํ ํ์๊ฐ ์๋ค. ๊ทธ๋ฅ idx๋ง ์ค์ฌ์ฃผ๋ฉด ์ธ์์ ํ์ง ์๋๋ค.
c++์์๋ stack์ ์ผ์ผํ ๊ตฌํํ์ง ์์๋ ๋๋ค. stdio์ฒ๋ผ ์ด๋ฏธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๊ตฌํ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
ํค๋ํ์ผ์ #include <stack>์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด๋๋ค.
์ด ๋ c++ํค๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํ ์ค์ ๋ ์ถ๊ฐํด์ฃผ์ด์ผ ํ๋๋ฐ ์ด๋ ๋ฐ์ ์ ์ฒด ์ฝ๋์์ ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.
๋ํ stack์ ๋ง๋๋ ค๋ฉด intํ ๋ณ์, charํ ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ์ฒ๋ผ stack์ด๋ผ๋ ๋ณ์๋ฅผ ํ๋ ์ ์ธํด์ฃผ์ด์ผํ๋ค.
๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค. stack<์ํ๋ ์๋ฃํ> ์ํ๋ ๋ณ์์ด๋ฆ;์์ ๊ฐ์ ํํ๋ก ์ฌ์ฉํ๋ฉด ๋๋๋ฐ
ํ๋์ ์์๋ฅผ ๋ค์๋ฉด stack์์ intํ ์๋ฃ๋ง ๋ค์ด๊ฐ ๊ฒฝ์ฐ, stack๋ณ์ ์ด๋ฆ์ s๋ก ์ง์ ํ๊ณ ์ถ์ ๋ stack<int> s;์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
๋ง์ง๋ง์ผ๋ก stackํค๋์ ์๋ push, pop๋ฑ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด "stack๋ณ์์ด๋ฆ.์ํ๋ ํจ์"์ ํํ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
์๋ ์ฝ๋๋ c++์ ๋ฏธ๋ฆฌ ๊ตฌํ๋์ด์๋ stack๋ผ์ด๋ธ๋ฌ๋ฆฌ(stl) ์ฌ์ฉํด ์คํ์ ๊ตฌํํ ๊ฒ์ด๋ค.
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std; //์ด ๋ถ๋ถ์ด c++ํค๋๋ฅผ ์ฌ์ฉํ ๋ ๊ผญ ์ถ๊ฐํด์ฃผ์ด์ผํ๋ ์ค์ด๋ค
stack<int> s;
int main() {
int N, data;
char order[8];
scanf("%d", &N);
while (N--) {
scanf("%s", order);
if (strcmp(order, "push") == 0) {
scanf("%d", &data);
s.push(data);
}
else if (strcmp(order, "pop") == 0) {
if(s.empty())
printf("-1\n");
else{
printf("%d\n", s.top());
s.pop();
}
}
else if (strcmp(order, "size") == 0)
printf("%d\n", s.size());
else if (strcmp(order, "top") == 0){
if(s.empty())
printf("-1\n");
else{
printf("%d\n", s.top());
}
}
else if (strcmp(order, "empty") == 0)
printf("%d\n", s.empty());
}
return 0;
}