Hello, ๋๋'s world !
์คํ(Stack) ๋ณธ๋ฌธ
์คํ(Stack)
:ํ์ชฝ ๋์์ ์๋ฃ๋ฅผ ๋ฃ๊ณ ๋บ๋ ์ฐ์ด๋ ์๋ฃ๊ตฌ์กฐ
๋ชฉ๋ก์ ํ์ชฝ๋์ Top์ด๋ผ๊ณ ํ ๋, Top์์ Push์ Pop์ด ์ด๋ฃจ์ด์ง๋ค. ์ฆ, LIFO(Last In First Out) ํ์์ด๋ค.
์์น์ ์ผ๋ก ์ค๊ฐ์์ ์ญ์ ,์ถ๊ฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ฉฐ Top์ ์์นํ๊ฒ๋ง ์ ์ ์๋ค.
์ผ์ฐจ์ ๋ฐฐ์ด๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค.
int stack[1000];
int size = 3; //์คํ์ ํฌ๊ธฐ
-----------------------------------------------------
//push
void push(int data){
stack[size] = data;
size += 1
}
-------------------------------------------------------
//pop
void pop(int data){
stack[size] = data;
size -= 1
}
์ผ์ผํ ๊ตฌํํ ์๋ ์์ง๋ง ์ ๊ณตํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๊ธฐ๋๋ฌธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ์ถ์ฒํ๋ค.
Java
- Stack
- import java.util.*;
- Stack<T> stack = new Stack<>();
- push() : ์คํ์ ์ฝ์
- pop() : ์คํ์์ ๊ฐ์ฅ ์์ ์๋ ๊ฐ ๋ฐํํ๊ณ ์์ฐ
- peek() : ์คํ์์ ๊ฐ์ฅ ์์ ์๋ ๊ฐ ๋ฐํ
- isEmpty() : ์คํ์ด ๋น์ด์๋์ง๋ฅผ ๋ฐํ
- size() : ์คํ์ ์๋ ์์์ ํฌ๊ธฐ ๋ฐํ
์คํ์ LIFO ์ฑ์ง์ ์ด์ฉํ์ฌ ๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ์ ์๋ค. ๋ํ์ ์ธ ๋ช๊ฐ์ง๋ฅผ ์ดํด๋ณด๊ฒ ๋ค.
-
๋จ์ด๋ค์ง๊ธฐ
-
๊ดํธ๋ฌธ์์ด
-
์คํ์์ด
-
์๋ํฐ
1. ๋จ์ด๋ค์ง๊ธฐ
N๊ฐ์ ๋ฌธ์ฅ์ด ์ฃผ์ด์ก์๋ ๋จ์ด๋ฅผ ๋ชจ๋ ๋ค์ง์ด์ผํ๋ค.
๋จ์ด์ ์์๋ฅผ ๋ฐ๊ฟ ์ ์๊ณ , ์์ด์ํ๋ฒณ์ผ๋ก๋ง ์ด๋ฃจ์ด์ ธ์๋ค.
-> ์ํ๋ฒณ์ ์คํ์ ๋ฃ์๋ค๊ฐ ๋นผ๋ฉด ์ญ์์ด ๋๋ค.
-> ๊ณต๋ฐฑ์ด๋ ๋ฌธ์์ด ๋์ด๋ฉด ์คํ์์ ๋ชจ๋ ๊บผ๋ด์ ์ญ์์ ๋ง๋ ๋ค.
-> ์๊ฐ๋ณต์ก๋๋ push O(1), pop O(1) ์ด๋ ๋ฃ์๋ค๊ฐ ๋นผ๋ฉด O(N)์ด๋๋ค.
2. ๊ดํธ
์ฌ๋ฐ๋ฅธ ๊ดํธ๋ฌธ์์ด์ ์ฐพ์์ผ ํ๋ ๋ฌธ์
-
๊ดํธ๋ฌธ์์ด : ( ์ ) ๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด
-
์ฌ๋ฐ๋ฅธ ๊ดํธ๋ฌธ์์ด : (), ()(()) , ((())) -> (), ()(()) , ((()))
-
์ง์ด ๋ง๋ ๊ดํธ๋ฌธ์์ด. ์ต์ข ์คํ ์ด ๋น์ด์๋๊ฒ ์ณ๋ฐ๋ฅธ ๊ดํธ๋ฌธ์์ด (() ๋ ์ฌ๋ฐ๋ฅด์ง ์๋ค.
ํญ์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฌ๋๊ดํธ ๋ซ๋๊ดํธ๊ฐ ์ง์ ์ด๋ฃฌ๋ค ex) (()())
1) ๋ซ๋๊ดํธ ์์ ์๋ ์ฌ๋๊ดํธ ex) (()())
2) ๋ค๋ฅธ ์ฌ๋๊ดํธ์ ์ง์ด ์๋ ๋ซ๋๊ดํธ ex) (()())
3) 1,2 ํด๋น์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ฌ๋๊ดํธ์ ์ง์์ง๋๋ค. ex) (()())
๋จ์ด์ ๊ธธ์ด๊ฐ N์ด๋ฉด ์๊ฐ๋ณต์ก๋๋ O(N^2) (์ต์ ์ ๊ฒฝ์ฐ ์์์๋๊ฒ์ ๋ค ๊ฒ์ฌํ ์ ์์ด์)
2-1.์คํ ๊ตฌํ์ผ๋ก ํ๊ธฐ
( ์ผ๊ฒฝ์ฐ ( pushํ๋ค.
) ์ผ๊ฒฝ์ฐ ) ๊ฐ์๋์ง ๋ง๋์ง ํ์ธํ ( popํ๋ค.
2-2.์คํ์ ํฌ๊ธฐ๋ก ํ๊ธฐ
์คํ์ ๊ตฌํํ์ง ์์๋ ์คํ์ ํฌ๊ธฐ๋ก ๊ตฌํ๊ฐ๋ฅํจ
using namespace std;
string valid(string s){
int cnt = 0; //์คํ์ ํฌ๊ธฐ
for (int i = 0; i<s.size(); i++){
if(s[i] == '(') { //์ฌ๋๊ดํธ์ผ๋
cnt += 1;
} else { //๋ซ๋๊ดํธ์ผ๋
cnt -= 1;
}
if (cnt < 0){
return "NO" //์ฌ๋ ๊ดํธ ๋ถ์กฑ
}
}
//๋ชจ๋ ๊ณผ์ ์ด ๋๋ํ ์ณ๋ฐ๋ฅธ ์คํ
์ด ๋น์๋์ง ํ์ธ
if(cnt == 0) {
return "YES";
} else {
return "NO";
}
}
3. ์์ด
1.....N ๊น์ง์ ์ซ์๋ฅผ ์คํ์ ๋ฃ์๋ค๊ฐ ๋บ์ผ๋ก ์์ดA๋ฅผ ๋ง๋ค ์ ์๋ค.
pop๋๋ ์์๋๋ก ์์ดA๊ฐ ๋ง๋ค์ด์ง๋ค
์๊ฐ๋ณต์ก๋๋ push O(1), pop O(1) ์ด๋ ๋ฃ์๋ค๊ฐ ๋นผ๋ฉด O(N)์ด๋๋ค.
ex) A = [4,3,6,8] ์ผ๋ ++++--++-++- ๋ก ๋ง๋ค ์ ์๋ค
4. ์๋ํฐ
-
์ปค์ : ๋ฌธ์ฅ์ ๋งจ์,๋ค,์ค๊ฐ ์์์ ๊ณณ์ ์์นํ ์ ์๋ค.
-
L : ์ผ์ชฝ์ผ๋ก ํ์นธ ์ฎ๊น abc|xz -> ab|cxz
-
D : ์ค๋ฅธ์ชฝ์ผ๋ก ํ์นธ ์ฎ๊น abc|xz -> abcx|z
-
B : ์ผ์ชฝ์ผ๋ก ํ์นธ ์ญ์ abc|xz -> ab|xz
-
P d : ์ปค์์ผ์ชฝ์ ๊ธ์ ์ถ๊ฐ abc|xz -> abcd|xz
๋ฌธ์์ด์ ๊ธธ์ด๊ฐ M์ด๋ผ ํ์์๋,
๋ฌธ์์ด๋ก๋ง ๊ตฌํ์ ํ๋ค๋ฉด N(M^2)๋ ๊ฑธ๋ฆผ....3600์ต (1์ด=1์ต)
์ปค์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์คํ ์ค๋ฅธ์ชฝ์คํ์ผ๋ก ๋๋์ด์ pop, push ํ๋ค.
์๊ฐ๋ณต์ก๋๋ L,D,B,P ๊ฐ๊ฐ O(1) ์ฉ ๊ฑธ๋ฆฐ๋ค.
๋ช ๋ น์ ์ํํ๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ด O(M)์ด ๋๋ค.
์ด๋ฌธ์ ๋ ๋งํฌ๋ ๋ฆฌ์คํธ๋ก๋ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
<์ฐธ๊ณ >
๋ฐฑ์ค์ฌ์ดํธ
gorani95.tistory.com/150
'๐ก ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ๋ ์ข์๊ธ (0) | 2021.01.22 |
---|---|
ํ(Queue) / ๋ฑ(Deque) (0) | 2021.01.08 |
์๊ฐ๋ณต์ก๋ (0) | 2021.01.07 |