Hello, ๋‚˜๋‚˜'s world !

์Šคํƒ(Stack) ๋ณธ๋ฌธ

๐Ÿ’ก ์•Œ๊ณ ๋ฆฌ์ฆ˜

์Šคํƒ(Stack)

Nana0 2021. 1. 8. 12:44

์Šคํƒ(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. ๋‹จ์–ด๋’ค์ง‘๊ธฐ

  2. ๊ด„ํ˜ธ๋ฌธ์ž์—ด

  3. ์Šคํƒ์ˆ˜์—ด

  4. ์—๋””ํ„ฐ

 

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)์ด ๋œ๋‹ค.

 

์Šคํƒ์˜ L์—ฐ์‚ฐ 

 

์ด๋ฌธ์ œ๋Š” ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. 

 


 

 

<์ฐธ๊ณ >

๋ฐฑ์ค€์‚ฌ์ดํŠธ

gorani95.tistory.com/150

Comments