๐ก์คํ(Stack)
๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ฅํ ๋ ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ๋ก, ๋ฐ์ดํฐ์ ์
๋ ฅ๊ณผ ์ถ๋ ฅ ์์๋ ํ์
์ ์ถ(FILO)๋ฐฉ์
์ฆ, ๋ง์ง๋ง์ผ๋ก ๋ฃ์๋ ๊ฐ์ด ๊ฐ์ฅ ๋จผ์ ๋ฝํ๋ ๊ตฌ์กฐ
- ํ : ๊ฐ์ฅ ๋์ค์ ์ถ๊ฐ๋ ํญ๋ชฉ์ ์์น
- ๋ฒ ์ด์ค: ๋จ์ ์๋ ํญ๋ชฉ ์ค์์ ๊ฐ์ฅ ๋จผ์ ์ถ๊ฐ๋ ํญ๋ชฉ์ ์์น
์คํ์ ์ฅ๋จ์
- ์ฅ์
๊ตฌ์กฐ๊ฐ ๋จ์ํด์ ๊ตฌํ์ด ์ฝ๋ค.
๋ฐ์ดํฐ์ ์ฝ์
๊ณผ ์ญ์ ๊ฐ ๋น ๋ฅด๋ค.
- ๋จ์
๋งจ ์์ ์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
ํ์์ ํ๋ ค๋ฉด ์์๋ฅผ ํ๋ํ๋ ๊บผ๋ด์ ์ฎ๊ฒจ๊ฐ๋ฉด์ ํด์ผํ๋ค. O(n)
โ๐ป ์คํ์ ์ฃผ์ ๋ฉ์๋
์คํ์๋ ์์ฃผ ์ฌ์ฉ๋๋ ๋ฉ์๋ (method)๊ฐ ์กด์ฌํ๋ค.
add, push
์คํ์ ๊ฐ์ ๋ฃ๊ธฐ ์ํด์๋ add ๋๋ push๋ฅผ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค. ๋ ํจ์๋ ๋ชจ๋ ์คํ์ ๊ฐ์ ๋ฃ์ ๋ ์ฌ์ฉํ๋ฉฐ, ์๋ก ๋ฃ์ ๊ฐ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์์นํ๋ค.
๋งจ ์์ ๊ฐ์ ์ฝ์
ํ๋ฏ๋ก O(1)
peek
peek๋ ๋ค์์ ๋์ฌ ๊ฐ์ ํ์ธํ๋ ๋ฉ์๋์ด๋ค. ํ์ง๋ง ์คํ์ ํ์
์ ์ถ์ ์๋ฆฌ๋ก ๊ตฌ์ฑ๋์ด์๋ค. ๋ฐ๋ผ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์์นํ ๊ฐ์ ํธ์ถํ๊ฒ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๋จ์ํ๊ฒ ํธ์ถ๋ง ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ด ์ ๊ฑฐ๋์ง ์๋๋ค.
๋ง์ง๋ง ๊ฐ๋ง ํ์ธํ๋ฉด ๋๋ฏ๋ก O(1)
pop
pop์ ํ์ poll๊ณผ ๊ฐ๋ค. ๊ฐ์ ํธ์ถํ๋ ๋์์ ์ ๊ฑฐํ๊ฒ ๋๋ค. peek์ ํ์ ๊ฒฝ์ฐ, ๊ฐ์ฅ ๋ค์ ์์นํ ๊ฐ์ด ์ฌ๋ผ์ง์ง ์์ง๋ง pop ์ดํ์๋ ๊ฐ์ด ์ฌ๋ผ์ง๋ค. ๋ฐ๋ผ์ ํ์์ ๋ฐ๋ผ peek๊ณผ pop์ ์ ์ ํ๊ฒ ํ์ฉํด์ผ ํ๋ค.
๋ง์ง๋ง ๊ฐ๋ง ์ญ์ ํ๋ฉด ๋๋ฏ๋ก O(1)
size
size๋ ๋ชจ๋ ์๋ฃ๊ตฌ์กฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํฌ๊ธฐ๋ฅผ ๋ฐํํ๋ ๋ฉ์๋์ด๋ค. ๋ฐํ ๊ฐ์ int ํํ๋ฅผ ๋๊ฒ๋๋ฉฐ, ์คํ์ด ๋น๊ฒ๋๋ฉด 0์ ๋ฐํํ๋ค.
clear
clear ์ญ์ ์ต์ํ ๋ฉ์๋์ด๋ค. ์์ฑ๋ ์คํ์ ํ๋ฒ์ ๋น์ฐ๋ ๋ฉ์๋๋ก, ์คํ ์์ฒด๊ฐ ์ฌ๋ผ์ง๋ ๊ฒ์ ์๋๋ค.
isEmpty
isEmpty๋ ์คํ์ด ๋ชจ๋ ๋น์๋์ง๋ฅผ ํ์ธํ๋ ๋ฉ์๋์ด๋ค. ๋ฐํ๊ฐ์ boolean ํํ๋ก ์ฃผ๋ก while๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ค.
โฐ ์คํ ์๊ฐ๋ณต์ก๋
- ์ฝ์
: O(1)
- ์ญ์ : O(1)
- ํ์: O(n)
์ญ์ ๋ ์ฝ์
์ ๋งจ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ๊ฑฐ๋ ์ญ์ ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ๋ณต์ก๋๋ ๋ O(1) ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
ํ์ง๋ง ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋๋ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋๊น์ง ์ํ์ ํด์ผํ๋ฏ๋ก O(n) ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋๋ค.
์ฌ์ฉ ์์ (Kotlin)
import java.util.*
fun main(args:Array<String>){
var s = Stack<Int>()
s.push(1) // ๊ฐ์ฒด๋ฅผ ์คํ์ ์ถ๊ฐ
s.push(3)
s.peek() // ๋งจ ์์ ๊ฐ์ฒด ๋ฐํ (๋น์ด ์๋ ์ํ์ด๋ฉด EmptyStackException ๋ฐ์)
println(s)
s.pop() // ๋งจ ์์ ๊ฐ์ฒด ์ญ์ ํ๊ณ ๋ฐํ (๋น์ด ์๋ ์ํ์ด๋ฉด EmptyStackException ๋ฐ์)
println(s)
}