๋ฌธ์
์ ์๋ฅผ ์ ์ฅํ๋ ํ๋ฅผ ๊ตฌํํ ๋ค์, ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ๋ช ๋ น์ ์ฒ๋ฆฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๋ช ๋ น์ ์ด ์ฌ์ฏ ๊ฐ์ง์ด๋ค.
- push X: ์ ์ X๋ฅผ ํ์ ๋ฃ๋ ์ฐ์ฐ์ด๋ค.
- pop: ํ์์ ๊ฐ์ฅ ์์ ์๋ ์ ์๋ฅผ ๋นผ๊ณ , ๊ทธ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ํ์ ๋ค์ด์๋ ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
- size: ํ์ ๋ค์ด์๋ ์ ์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
- empty: ํ๊ฐ ๋น์ด์์ผ๋ฉด 1, ์๋๋ฉด 0์ ์ถ๋ ฅํ๋ค.
- front: ํ์ ๊ฐ์ฅ ์์ ์๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ํ์ ๋ค์ด์๋ ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
- back: ํ์ ๊ฐ์ฅ ๋ค์ ์๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ํ์ ๋ค์ด์๋ ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ค.
์คํ๊ณผ ํ
์คํ์ ํต์กฐ๋ฆผ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.

ํ ๋งํ ํต์กฐ๋ฆผ์์ ๋งจ ์๋์ ์๋ ํ ๋งํ ๋ฅผ ๋นผ๊ธด ํ๋ค๋ค.
๋งจ ์์ ์๋ ํ ๋งํ ๋ถํฐ ๊บผ๋ด์ผ ํ๋ค.
ํ ๋งํ ํต์กฐ๋ฆผ์ ๋ง๋ค ๋ ๊ฐ์ฅ ์ฒ์ ๋ค์ด๊ฐ ํ ๋งํ ๋ ๋งจ ์๋์ ์๋ ํ ๋งํ ์ด๊ณ , ๊ฐ์ฅ ๋์ค์ ๋ค์ด๊ฐ ํ ๋งํ ๋ ๋งจ ์์ ์๋ ํ ๋งํ ์ด๋ค.
ํ ๋งํ ํต์กฐ๋ฆผ์ ๋จน๋ ์ฌ๋์ ๊ฐ์ฅ ๋์ค์ ๋ค์ด๊ฐ ํ ๋งํ ๋ฅผ ๊ฐ์ฅ ๋จผ์ ๋จน๊ฒ ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก, ํ์ ์ ์ถ(LIFO : Last-In First-Out)์ด๋ค.
์์ด ํด์ ๊ทธ๋๋ก "๋์ค์ ๋ค์ด์จ ๊ฒ์ด ๋จผ์ ๋๊ฐ๋ค."๋ผ๋ ๋ป์ด๋ค.
์คํ๋ ์ด์ ๊ฐ๋ค.
์คํ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ฉด ๊ฐ์ฅ ์๋๋ถํฐ ์ฐจ๊ณก์ฐจ๊ณก ์์ฌ์ง๊ณ , ์ญ์ ๋ฅผ ํ๋ฉด ๊ฐ์ฅ ์๋ถํฐ ์ฌ๋ผ์ง๋ค.
โ
ํ๋ ํฐ๋์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.

ํฐ๋์์๋ ์ถ์์ ํ๋ฉด ์ ๋๋ค.
์ฆ, ํฐ๋์ ๋จผ์ ๋ค์ด๊ฐ ์ฐจ๊ฐ ๋จผ์ ๋๊ฐ์ผ ํ๋ค.
ํฐ๋์ ๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ ์ฐจ๊ฐ ๊ฐ์ฅ ๋จผ์ ํฐ๋์ ๋์จ๋ค.
์ด๊ฒ์ด ๋ฐ๋ก, ์ ์ ์ ์ถ(FIFO : First-In First-Out)์ด๋ค.
ํ๋ ์ด์ ๊ฐ๋ค.
ํ์ ๊ฐ์ฅ ์ฒ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋๊ฐ๊ฒ ๋๋ค.
์คํ์ ๊ตฌ๋ฉ์ด ํ๋์ธ ํต์กฐ๋ฆผ๊ณผ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋จผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๋ ๊ฐ์ฅ ๋์ค์ ๋๊ฐ๊ฒ ๋์ง๋ง,
ํ๋ ๊ตฌ๋ฉ์ด ๋ ๊ฐ ์๋ ํฐ๋๊ณผ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋จผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋๊ฐ๊ฒ ๋๋ค.
โ
ํ์ ์ข ๋ฅ์๋ ์ ํ ํ์ ์ํ ํ๊ฐ ์๋ค.
์ ํ ํ๋ ์ผ์๋ก ๋ ์ฃผ์ฐจ์ฅ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ดํด๊ฐ ์ฝ๋ค.
๋งจ ์์ ์๋ ์ฐจ๊ฐ ๋๊ฐ๊ณ ๋ ๋น์๋ฆฌ๋ ์ฐจ์ง ์๊ณ ๊ทธ ๋ค๋ถํฐ ์ฐจ๊ฐ ์ฑ์์ง๋ค๊ณ ๊ฐ์ ํด๋ณด์.
๋งจ ์์ ์ฃผ์ฐจ๊ณต๊ฐ์ ๊ณ์ ๋น์ด์ ธ ์์ด ๋นํจ์จ์ ์ธ ๊ณต๊ฐ์ ์ฐจ์งํ๊ฒ ๋๋ค.
์ฆ, ์ ํ ํ๋ ๋ฐ์ดํฐ๊ฐ ์ฒ์ ๋ค์ด์จ ์๋ฆฌ์ ๊ณ ์ ๋์ด ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํด๋ ๋น์ด์๋ ์ธ๋ฑ์ค๋ก ๋จ๊ฒ ๋์ด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์ฌํ๋ค.
์ํ ํ๋ ์ ํ ํ์ ๋จ์ ์ ๊ทน๋ณตํ ํ๋ก, ์ํ์ผ๋ก ๋ ์ ํ ํ์ด๋ค.
๋ฐ์ดํฐ๊ฐ ํ์ ์ต๋ ๋ฒ์๋ฅผ ๋์ด๊ฐ๊ฒ ๋๋ฉด ๋์ ์ผ๋ก ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค๋ก ๋์๊ฐ๊ฒ ํ๋ค.
์ฝ๋ ์ค๋ช
1. ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
#include <cstring>
strcmp๋ฅผ ์ด์ฉํ๊ธฐ ์ํจ์ด๋ค.
โ
2. ๊ด์ญ ๋ณ์
๋ชจ๋ ์ง์ญ์์ ์ธ ์ ์๋ ๋ณ์์ด๋ค.
๋จ, ๋ฐ๋์ ๊ด์ญ ๋ณ์๊ฐ ํธ์ถ๋๊ธฐ ์ ์ ์ ์ธ์ด ๋์ด์์ด์ผ ํ๋ค.
์ด ๋ฌธ์ ์์๋ ์ฌ์ฉ์์๊ฒ ๋ฐ๋ ๋ช ๋ น์ ๋ด๋ stack ๋ฐฐ์ด๊ณผ ๋ฐฐ์ด์ ๊ฐ์ฅ ์์ ์๋ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ address ๋ณ์๋ฅผ ๊ด์ญ ๋ณ์๋ก ์ ์ธํ๋ค.
๋ฐฐ์ด์ ์ฃผ์๋ 0๋ถํฐ ์์ํ๋ฏ๋ก address๋ -1๋ก ์ง์ ํ์๊ณ , ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ฌ ๋(push ํจ์) -1์ 1์ ๋ํ 0์ผ๋ก ๋ฐ๊พธ์ด ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ค.
โ
3. push ํจ์
void push(int x)
{
que[++address] = x;
}
์ ์ x๋ฅผ ํ์ ๋ฃ๋ ํจ์์ด๋ค.
ํ์ฌ ๋ฐฐ์ด์ ์ด๋ฏธ ๊ฐ์ด ์ ์ฅ๋์ด ์๊ฑฐ๋, ๋ฐฐ์ด์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์(address๊ฐ -1์ผ ๋)
++address๋ฅผ ํด์ฃผ์ด ๋ฐฐ์ด์ ์ฃผ์๋ฅผ ํ๋ ๋ํด์ค๋ค.
address++๋กํ๋ ๋ฐฉ๋ฒ๋ ์๋๋ฐ ์ด๋ด ๋๋ ๋ฌธ์ฅ์ ์คํํ ๋ค์ ํ๋๋ฅผ ๋ํ๋ค.
๋ฐ๋ฉด์ ++address๋ ๋ฌธ์ฅ์ด ์คํ๋๊ธฐ ์ ์ ํ๋๋ฅผ ๋ํ๊ณ ๋ฌธ์ฅ์ ์คํํ๋ค.
โ
4. pop ํจ์
void pop()
{
int top_pop = 0;
if (address < 0) cout << "-1\n";
else {
top_pop = que[0];
for (int i = 0; i < address; i++) {
que[i] = que[i + 1];
}
que[address--] = 0;
cout << top_pop << "\n";
}
}
ํ์์ ๊ฐ์ฅ ์์ ์๋ ์ ์(๋ฐฐ์ด์ 0๋ฒ ์ธ๋ฑ์ค)๋ฅผ ์ญ์ ํ๊ณ , ๊ทธ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ํ์ ๋ค์ด์๋ ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ ํจ์์ด๋ค.
๋ฐฐ์ด์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ address ๋ณ์๊ฐ 0๋ณด๋ค ์์ ๋๋, ๋ฐฐ์ด์ ๋ด๊ธด ๊ฐ์ด ์๋ค๋ ๋ป์ด๋ฏ๋ก -1์ ์ถ๋ ฅํ๊ณ ,
๋ฐฐ์ด์ ๋ด๊ธด ๊ฐ์ด ์์ ๋๋, ๊ฐ์ฅ ์์ ์๋ ๊ฐ(๋ฐฐ์ด์ 0๋ฒ ์ธ๋ฑ์ค)์ top_pop ๋ณ์์ ๋ด๋๋ค.
ํ๋ ๊ฐ์ฅ ์์ ์๋ ์ธ๋ฑ์ค๋ถํฐ ์ญ์ ๋๊ณ ๊ทธ ์ธ๋ฑ์ค๊ฐ ๋น์ด์๋ ์ธ๋ฑ์ค๋ก ๋จ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๋ค.
์ด๋ฌํ ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ฉด ๊ทธ ๋ค์ ์๋ ๋ฐ์ดํฐ๋ค์ ํ๋์ฉ ์์ผ๋ก ์ฎ๊ฒจ์ฃผ์๋ค.
๊ฐ์ฅ ๋ค์ ์๋ ๊ฐ์ 0์ผ๋ก ๋ฐ๊พธ์ด ์์ ๊ณ , address๋ฅผ ํ๋ ์ค์ฌ์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ค์ธ๋ค.
๊ทธ๋ค์, ์ญ์ ํ ๊ฐ์ฅ ์์ ์๋ ๊ฐ์ ๋ด์ top_pop์ ์ถ๋ ฅํ๋ค.
์ค๋ฐ๊ฟ์ endl๋ก๋ ๊ฐ๋ฅํ์ง๋ง, ์ํ ์๊ฐ์ ์ค์ด๊ธฐ ์ํด "\n"์ผ๋ก ๋์ฒดํ๋ค.
โ
5. size ํจ์
void size()
{
cout << address + 1 << "\n";
}
๋ฐฐ์ด์ ์ฃผ์๋ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์, size๋ฅผ ํํํ๊ธฐ ์ํด์๋ 1์ ๋ํด์ฃผ์ด์ผ ํ๋ค.
โ
6. empty ํจ์
void empty()
{
if (address < 0) cout << "1\n";
else cout << "0\n";
}
ํ๊ฐ ๋น์ด์์ผ๋ฉด 1, ์๋๋ฉด 0์ ์ถ๋ ฅํ๋ ํจ์์ด๋ค.
address๊ฐ 0๋ณด๋ค ์์ผ๋ฉด ๋ฐฐ์ด์ ๋ด๊ธด ๊ฒ ์๋ค๋ ๋ป์ด๋ฏ๋ก, 1์ ์ถ๋ ฅํ๊ณ , 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด ๋ฐฐ์ด์ ํ๋ ์ด์ ๋ด๊ฒจ ์๋ค๋ ๋ป์ด๋ฏ๋ก 0์ ์ถ๋ ฅํ๋ค.
โ
7. front ํจ์
void front()
{
if (address < 0) cout << "-1\n";
else cout << que[0] << "\n";
}
ํ์ ๊ฐ์ฅ ์์ ์๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํจ์์ด๋ค. ๋ง์ฝ ํ์ ๋ค์ด์๋ ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ ํจ์์ด๋ค.
๊ฐ์ฅ ์์ ์๋ ์ฃผ์๋ 0๋ฒ ์ธ๋ฑ์ค์ด๋ฏ๋ก que ๋ฐฐ์ด์ 0๋ฒ ์ธ๋ฑ์ค์ ๋ค์ด์๋ ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
โ
8. back ํจ์
void back()
{
if (address < 0) cout << "-1\n";
else cout << que[address] << "\n";
}
ํ์ ๊ฐ์ฅ ๋ค์ ์๋ ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํจ์์ด๋ค. ๋ง์ฝ ํ์ ๋ค์ด์๋ ์ ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ถ๋ ฅํ๋ ํจ์์ด๋ค.
address๋ ๋ฐฐ์ด์ ๊ฐ์ฅ ๋ค์ ์๋ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ฏ๋ก que ๋ฐฐ์ด์ address ์ฃผ์์ ์๋ ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
โ
9. strcmp ํจ์
๋ฌธ์์ด 1๊ณผ ๋ฌธ์์ด 2๊ฐ ๊ฐ์ผ๋ฉด 0์ ๋ฐํํ๋ ํจ์์ด๋ค.
์ปดํ์ผ๋ฌ๋ 0์ false๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์, '!'('๋ฐ๋')๋ฅผ ์์ ์ฐ๋ฉด true๊ฐ ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ฌธ์์ด 1๊ณผ ๋ฌธ์์ด 2๊ฐ ๊ฐ์ผ๋ฉด if ๋ฌธ์ ์คํํ๊ณ , ๋ค๋ฅด๋ฉด if ๋ฌธ์ ์คํํ์ง ์๋๋ค.
์ฝ๋
#include <iostream>
#include <cstring>
using namespace std;
int que[10000];
int address = -1;
void push(int x)
{
que[++address] = x;
}
void pop()
{
int top_pop = 0;
if (address < 0) cout << "-1\n";
else {
top_pop = que[0];
for (int i = 0; i < address; i++) {
que[i] = que[i + 1];
}
que[address--] = 0;
cout << top_pop << "\n";
}
}
void size()
{
cout << address + 1 << "\n";
}
void empty()
{
if (address < 0)cout << "1\n";
else cout << "0\n";
}
void front()
{
if (address < 0) cout << "-1\n";
else cout << que[0] << "\n";
}
void back()
{
if (address < 0) cout << "-1\n";
else cout << que[address] << "\n";
}
int main()
{
int n, x;
cin >> n;
char command[10];
for (int i = 0; i < n; i++)
{
cin >> command;
if (!strcmp(command, "push")) {
cin >> x;
push(x);
}
else if (!strcmp(command, "pop")) pop();
else if (!strcmp(command, "size")) size();
else if (!strcmp(command, "empty")) empty();
else if (!strcmp(command, "front")) front();
else if (!strcmp(command, "back")) back();
}
return 0;
}

(์ปดํจํฐ๊ณตํ๊ณผ ๊ณผ๋์๋ฆฌ init ์์ ํ์ ๋ํ ์์ธํ ์ค๋ช ์ ๋ฃ๊ณ , ์คํ ์ฝ๋์ ์ฐ๊ด ์ง์ด ์๊ฐํด ๋ณด๋ฉด์ ํ ์ฝ๋๋ฅผ ๋ง๋ค์๋๋ ํ ๋ฒ์ ๋ง์๋ค.)
โ
โ
โ
'๋ฐฑ์ค ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2309๋ฒ_๋ธ๋ฃจํธ ํฌ์ค_์ผ๊ณฑ ๋์์ด (0) | 2022.06.11 |
---|---|
[๋ฐฑ์ค] 1991๋ฒ_์๊ณ ๋ฆฌ์ฆ_ํธ๋ฆฌ ์ํ (0) | 2022.06.11 |
[๋ฐฑ์ค] 10828๋ฒ_์๊ณ ๋ฆฌ์ฆ_์๋ฃ๊ตฌ์กฐ_์คํ (0) | 2022.06.11 |
[๋ฐฑ์ค] 17219๋ฒ_์๊ณ ๋ฆฌ์ฆ_์๋ฃ๊ตฌ์กฐ_๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ (0) | 2022.06.11 |
[๋ฐฑ์ค] 15552๋ฒ_๋จ๊ณ๋ณ๋ก ํ์ด๋ณด๊ธฐ_ for ๋ฌธ_๋น ๋ฅธ A+B (0) | 2022.06.11 |