๐ค[์๊ณ ๋ฆฌ์ฆ] SW Expert ํ์ด์ฌ SW๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ - Stack1 ๊ฐ์
Stack ์๋ฃ๊ตฌ์กฐ์ ๊ฐ๋
Stack์ ํน์ฑ
Stack
ํ๋ก๊ทธ๋จ์์ ์ค์์ฑ๊ณผ ํ์ฉ๋๊ฐ ๋งค์ฐ ๋์ ์๋ฃ๊ตฌ์กฐ
- ๋ฌผ๊ฑด์ ์์ ์ฌ๋ฆฌ๋ฏ ์๋ฃ๋ฅผ ์์ ์ฌ๋ฆฐ ํํ์ ์๋ฃ๊ตฌ์กฐ
- ์คํ์ ์ ์ฅ๋ ์๋ฃ๋ ์ ํ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง
- ์ ํ๊ตฌ์กฐ: ์๋ฃ๊ฐ์ ๊ด๊ณ๊ฐ 1๋1์ ๊ด๊ณ๋ฅผ ๊ฐ์ง
- ๋น์ ํ๊ตฌ์กฐ: ์๋ฃ๊ฐ์ ๊ด๊ณ๊ฐ 1๋N์ ๊ด๊ณ๋ฅผ ๊ฐ์ง(ex: ํธ๋ฆฌ)
- ์คํ์ ์๋ฃ๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ์คํ์์ ์๋ฃ๋ฅผ ๊บผ๋ผ ์ ์์
- ๋ง์ง๋ง์ ์ฝ์
ํ ์๋ฃ๋ฅผ ๊ฐ์ฅ ๋จผ์ ๊บผ๋
= ํ์ ์ ์ถ(LIFO=Last-In-First-Out)
ex) ์คํ์ 1,2,3์์ผ๋ก ์๋ฃ๋ฅผ ์ฝ์ ํ ํ ๊บผ๋ด๋ฉด 3,2,1์์ผ๋ก(์ญ์) ๊บผ๋ผ ์ ์์
Stack์ ๊ตฌํ
์คํ์ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ตฌํํ๊ธฐ ์ํด ํ์ํ ๋ด์ฉ
1. ์๋ฃ๊ตฌ์กฐ
-> ์๋ฃ๋ฅผ ์ ํ์ผ๋ก ์ ์ฅํ ์ ์ฅ์๊ฐ ํ์ํจ
- C์ธ์ด์์๋ ๋ฐฐ์ด ์ฌ์ฉ๊ฐ๋ฅ
- ํ์ด์ฌ์์๋ ๋ฆฌ์คํธ ์ฌ์ฉ๊ฐ๋ฅ
์ด๋ ๋ฆฌ์คํธ๋ก ๊ตฌํ๋ ์ ์ฅ์ ์์ฒด๋ฅผ ์ข์์๋ฏธ๋ก ์คํ์ด๋ผ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค. - ์คํ์์ ๋ง์ง๋ง ์ฝ์ ๋ ์์์ ์์น๋ฅผ top์ด๋ผ ๋ถ๋ฅธ๋ค.
์คํ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ฐ์ฐ์ด ํ์ํจ
2. ์ฐ์ฐ
-
์ฝ์
: ์ ์ฅ์์ ์๋ฃ๋ฅผ ์ ์ฅํ๊ณ ๋ณดํต push๋ผ ๋ถ๋ฅธ๋ค. -
์ญ์
: ์ ์ฅ์์์ ์๋ฃ๋ฅผ ๊บผ๋. ๊บผ๋ธ ์๋ฃ๋ ์ฝ์ ํ ์๋ฃ์ ์ญ์์ผ๋ก ๊บผ๋ด๋ฉฐ ๋ณดํต pop์ด๋ผ ๋ถ๋ฅธ๋ค. -
isEmpty
: ์คํ์ด ๊ณต๋ฐฑ์ธ์ง ์๋์ง๋ฅผ ํ์ธํ๋ ์ฐ์ฐ -
peek
: ์คํ์ top์ ์๋ item(์์)์ ๋ฐํํ๋ ์ฐ์ฐ
Stack์ ์ฐ์ฐ
์คํ์ ์ฝ์ /์ญ์ ์ฐ์ฐ ๊ณผ์
ex) ๋น ์คํ์ ์์ A,B,C๋ฅผ ์ฐจ๋ก๋ก ์ฝ์
ํ ํ ๋ฒ ์ญ์ ํ๋ ์ฐ์ฐ๊ณผ์
์ต์ด์ ์คํ์ ์๋ฃ๊ฐ ์๋ ๊ณต๋ฐฑ์ํ.
์ด๋ ๋ง์ง๋ง ์์๋ฅผ ๊ฐ๋ฆฌํค๋ top์ ์๋ฃ๊ฐ ์๊ธฐ ๋๋ฌธ์ -1
์ ๊ฐ์ ๊ฐ๋๋ค.
push ์๊ณ ๋ฆฌ์ฆ
def push(item): #์ฝ์
ํ ์๋ฃ item์ ์
๋ ฅ๊ฐ์ผ๋ก ๋ฐ์
s.append(item) #top์ ํ๋ ์ฆ๊ฐ์ํค๊ณ ์คํ s์ top์์น์ ์๋ฃ item์ ์ ์ฅ
ํ์ด์ฌ์์๋ ์คํ์ ๋ฆฌ์คํธ๋ก ๊ตฌํ.
ํ์ด์ฌ์ ๋ฆฌ์คํธ๋ ํฌ๊ธฐ ์ ํ ์์ด ๋ฐ์ดํฐ ์ฝ์
์ ์์ ๋กญ๊ฒ ํ ์ ์์.
๊ทธ๋์ ๋ฆฌ์คํธ๋ก ๊ตฌํ์์๋ ์ค๋ฒํ๋ก์ฐ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํ ํ์๊ฐ ์๋ค.
๋ํ ๋ฆฌ์คํธ์ ๋ฐ์ดํฐ ์ฝ์ ์ ์ฝ์ ํ ๋ง์ง๋ง ์์น๋ฅผ ๊ธฐ์ตํ top ๋ณ์๋ ํ์์๋ค. append() ๋ฉ์๋๋ฅผ ํตํด์ ๋ฆฌ์คํธ์ ๋ง์ง๋ง์ data๋ฅผ ์ฝ์ ํ ์ ์๋ค.
pop ์๊ณ ๋ฆฌ์ฆ
def pop():
if len(s)==0: #์คํ์ ์๋ฃ๊ฐ ์๋ ์ํ
#underflow์ฒ๋ฆฌ
return
else:
return s.pop(-1) #์คํ์ ๋ง์ง๋ง ๊ฐ ๋ฐํ.
top์ด -1์ธ ๊ฒฝ์ฐ, -1์ top์ ์ด๊ธฐ๊ฐ์ ์๋ฏธํ๋ฉฐ ์ด๋ ์คํ์ ์๋ฃ๊ฐ ์๋ ์ํ๋ฅผ ์๋ฏธ.
์ด ๊ฒฝ์ฐ underflow์ฒ๋ฆฌ๋ฅผ ํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ์คํ s์์ top์ ๊ฐ์ ๋ฐํํ๊ณ top์ ํ๋ ๊ฐ์.
ํ์ด์ฌ์์๋ ๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ฅผ lenํจ์๋ฅผ ํตํด ์ ์ ์์ผ๋ฏ๋ก top๋ณ์ ์ฌ์ฉํ ํ์ ์๋ค.
๋ฆฌ์คํธ์์๋ pop()
๋ฉ์๋๋ฅผ ํตํด์ ์ํ๋ ์ธ๋ฑ์ค ์์น์ ๊ฐ์ ์ญ์ ํ๊ณ ๋ฐํ๋ฐ์ ์ ์๋ค. ์ธ์๊ฐ์ผ๋ก -1์ ์
๋ ฅํ๋ฉด ๋ง์ง๋ง ์์น์ ๊ฐ์ ์ญ์ ํ๊ณ ๋ฐํ๋ฐ๋๊ฒ.
pop๊ตฌํ์์๋ top๋ณ์๊ฐ ํ์์๋ค.
stack ๊ตฌํ
- ์คํ ๊ตฌํ
- ๊ตฌํํ ์คํ์ ์ด์ฉํ์ฌ 3๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์คํ์ ์ ์ฅํ๊ณ ๋ค์ 3๋ฒ ๊บผ๋ด์ ์ถ๋ ฅํ๊ธฐ
def push(item):
s.append(item)
def pop():
if len(s)==0:
print("Stack is Empty!!") #underflow
return
else:
return s.pop(-1)
s=[]
push(1)
push(2)
push(3)
print('pop item =>', pop())
print('pop item =>', pop())
print('pop item =>', pop())
์คํ ๊ตฌํ ๊ณ ๋ ค์ฌํญ
- ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ์ ๊ตฌํํ๋ ๊ฒฝ์ฐ
- ์ฅ์ : ๊ตฌํ์ด ์ฉ์ด
- ๋จ์ : ๋ฆฌ์คํธ์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ์ ๋ด๋ถ์ ์ผ๋ก ํฐ overhead ๋ฐ์ ์์ ์ผ๋ก ๋ง์ ์๊ฐ์ด ์์
-> ํด๊ฒฐ๋ฐฉ๋ฒ
1. ๋ฆฌ์คํธ์ ํฌ๊ธฐ๊ฐ ๋ณ๋๋์ง ์๋๋ก ๋ฐฐ์ด์ฒ๋ผ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์ ํด๋๊ณ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
2. ๋์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํ์ฌ ์ ์ฅ์๋ฅผ ๋์ ์ผ๋ก ํ ๋นํ์ฌ ์คํ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
- ์ฅ์ : ๊ตฌํ์ด ์ฉ์ด. ์คํ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ, ์ญ์ ํ๋ ์์ ์ด ๋ง์ด ์ผ์ด๋ ๊ฒฝ์ฐ ์๊ฐ์ ์ ์ฝํ ์ ์๋ค.
- ๋จ์ : ๋ฆฌ์คํธ๋ก ๊ตฌํํ๋๊ฒ๋ณด๋ค ๊ตฌํ์ด ๋ณต์กํจ
Stack์ ์์ฉ
๊ดํธ๊ฒ์ฌ
๊ดํธ์ ์ข ๋ฅ
- ๋๊ดํธ []
- ์ค๊ดํธ {}
- ์๊ดํธ ()
๋ฌธ์ฅ์์ ๊ดํธ๋ฅผ ์ฌ๋ฐ๋ก ์ฌ์ฉํ๋์ง๋ฅผ ์กฐ์ฌํ๋ ์กฐ๊ฑด
- ์ผ์ชฝ ๊ดํธ์ ๊ฐ์์ ์ค๋ฅธ์ชฝ ๊ดํธ์ ๊ฐ์๊ฐ ๊ฐ์์ผํจ
- ๊ฐ์ ๊ดํธ์์ ์ผ์ชฝ ๊ดํธ๋ ์ค๋ฅธ์ชฝ ๊ดํธ๋ณด๋ค ๋จผ์ ๋์์ผํจ
- ๊ดํธ ์ฌ์ด์๋ ํฌํจ๊ด๊ณ๋ง ์กด์ฌํจ
ex) ์๋ชป๋ ๊ดํธ ์ฌ์ฉ
(a(b)
, a(b)c)
, a{b(c[d]e}f)
์คํ์ ์ด์ฉํ ๊ดํธ ๊ฒ์ฌ
์์์ ํํํ ๋ฌธ์์ด์ ์
if((i==0)&&(j==0)
๋ฌธ์์ด์์ ํ ๋ฌธ์์ฉ ์ฝ์ด, ๋ง์ฝ ์ฌ๋๊ดํธ์ด๋ฉด ์คํ์ ์ ์ฅํ๊ณ , ๋ซ์๊ดํธ์ผ๊ฒฝ์ฐ ์คํ์์ popํ์ฌ ๋น๊ต.
์คํ์ ์ด์ฉํ์ฌ ์ ์ฅํ๊ณ ๊บผ๋ด์ด ๋น๊ตํ๋๋์ ์กฐ๊ฑด์ ์๋ฐฐ๋๋ฉด ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉ๋์ง ๋ชปํ ๊ดํธ๋ผ๊ณ ํ๋จ
๊ดํธ๋ฅผ ์กฐ์ฌํ๋ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์
Function call
ํจ์ ํธ์ถ ๊ด๋ฆฌ
: ํ๋ก๊ทธ๋จ์์์ ํจ์ ํธ์ถ๊ณผ ๋ณต๊ท์ ๋ฐ๋ฅธ ์ํ ์์๋ฅผ ๊ด๋ฆฌ
- ๊ฐ์ฅ ๋ง์ง๋ง์ ํธ์ถ๋ ํจ์๊ฐ ๊ฐ์ฅ ๋จผ์ ์คํ์ ์๋ฃํ๊ณ ๋ณต๊ทํ๋ ํ์ ์ ์ถ ๊ตฌ์กฐ์ด๋ฏ๋ก, ํ์ ์ ์ถ ๊ตฌ์กฐ์ ์คํ์ ์ด์ฉํ์ฌ ์ํ์์ ๊ด๋ฆฌ
- ํจ์ ํธ์ถ์ด ๋ฐ์ํ๋ฉด ํธ์ถํ ํจ์ ์ํ์ ํ์ํ ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์ ๋ฐ ์ํ ํ ๋ณต๊ทํ ์ฃผ์ ๋ฑ์ ์ ๋ณด๋ฅผ ์คํ ํ๋ ์์ ์ ์ฅํ์ฌ ์์คํ ์คํ์ ์ฝ์
- ํจ์์ ์คํ์ด ๋๋๋ฉด ์์คํ ์คํ์ top ์์(์คํ ํ๋ ์)๋ฅผ ์ญ์ (pop)ํ๋ฉด์ ํ๋ ์์ ์ ์ฅ๋์ด์๋ ๋ณต๊ท์ฃผ์๋ฅผ ํ์ธํ๊ณ ๋ณต๊ท
- ํจ์ ํธ์ถ๊ณผ ๋ณต๊ท์ ๋ฐ๋ผ ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ์ ์ฒด ํ๋ก๊ทธ๋จ ์ํ์ด ์ข ๋ฃ๋๋ฉด ์์คํ ์คํ์ ๊ณต๋ฐฑ ์คํ์ด ๋จ
ํจ์ ํธ์ถ ์ํ ์์
- ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด ํ๋ก๊ทธ๋จ์ mainํจ์์ ๋ํ ์คํ ํ๋ ์์ด ์คํ์ ์์นํ๋ค. ์ด๋ top์ ํ์ฌ ์คํ ์ค์ธ ํจ์, ์ฆ mainํจ์์ ๋ํ ์คํ ํ๋ ์์ ์์น๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
- ๋ฉ์ธํจ์์์ F_1ํจ์๋ฅผ ํธ์ถ
- F_1ํจ์์ ๋ํ ์คํ ํ๋ ์์ด ์คํ์ ์ฝ์ ๋๊ณ top์ด ์ด๋ฅผ ๊ฐ๋ฆฌํด
- F_1ํจ์์ ์คํ์ด ์์๋จ
- F_1์์ F_2ํจ์๋ฅผ ํธ์ถ
- F_2ํจ์์ ๋ํ ์คํ ํ๋ ์์ด ์คํ์ ์ฝ์ ๋๊ณ top์ด ์ด๋ฅผ ๊ฐ๋ฆฌํด
- F_2ํจ์์ ์คํ์ด ์์๋จ
- F_2ํจ์๊ฐ ์คํ๋๊ณ ์ข ๋ฃ๋จ.
- F_2ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ์คํํ๋ ์์ ์ ์ฅ๋ F_1ํจ์์ ๋ณต๊ท์ฃผ์๋ฅผ ์กฐํํ๊ณ , F_1ํจ์๋ก ๋ณต๊ท. ์ด๋ ์คํ์์ top์ ์์น ๋ณ๊ฒฝ๋จ. ๋์ด์ F_2์ ๋ํ ์คํ ํ๋ ์์ ์ ๋ณด๊ฐ ์ ํจํ์ง ์๋ค๋๊ฒ์ ์ดํดํด์ผ ํ๋ค.
- F_2ํจ์๋ก๋ถํฐ ๋ณต๊ทํ, F_1ํจ์์ ๋จ์๋ถ๋ถ์ ์ํํ๊ณ F_1ํจ์๊ฐ ์ข ๋ฃ๋จ
- F_1ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ์คํ์์ top์ ๋ณ๊ฒฝํ์ฌ F_1์ ์คํํ๋ ์ ์ ๋ณด๋ฅผ ๋ฌดํจํ ํ๊ณ mainํจ์๋ก ๋ณต๊ทํ๋ค.
- mainํจ์๋ก ๋ณต๊ทํ, mainํจ์์ ๋จ์ ๋ถ๋ถ์ ์ํํ๊ณ mainํจ์์ ์ํ์ ์ข
๋ฃํ๋ค.
์ฌ๊ท ํธ์ถ
ํจ์ ํธ์ถ์ ํน์ํ ๊ฒฝ์ฐ
- ์๊ธฐ ์์ ์ ํธ์ถํ์ฌ ์ํ ์ํ๋๋ ๊ฒ
- ํจ์์์ ์คํํด์ผ ํ๋ ์์ ์ ํน์ฑ์ ๋ฐ๋ผ ์ผ๋ฐ์ ์ธ ํธ์ถ๋ฐฉ์๋ณด๋ค ์ฌ๊ท ํธ์ถ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ๋ง๋ค๋ฉด ํ๋ก๊ทธ๋จ์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ๊ฐ๋จํ๊ฒ ์์ฑํ ์ ์๋ค.
- ๋๋ฒ๊น
์ด ์ด๋ ต๊ณ ์๋ชป ์์ฑํ๊ฒ ๋๋ฉด ์ํ์๊ฐ์ด ๋ง์ด ์์๋จ
์ฌ๊ทํธ์ถ์ ํจ์ํธ์ถ๊ณผ ์ ์ฌํ์ง๋ง ์คํํ๋ ์์ผ๋ก ์คํ์ ์ ์ฅ๋๋ ๊ฐ์ด ์
๋ ฅ๊ฐ์ด ํ๋ฆฐ ๊ฐ์ ํจ์์ ์คํ
ํ๋ ์์ ์ ์ฅํ๋ค๋ ์ฐจ์ด์ ์ด ์กด์ฌ
Memoization
ํผ๋ณด๋์น ์์ด
์ฌ๊ท ํธ์ถ์ ์์ฑํ ์ ์๋ ํจ์ - ํผ๋ณด๋์น ์์ด์ ๊ตฌํ๋ ํจ์
- 0๊ณผ 1๋ก ์์ํ๊ณ ์ด์ ์ ๋ ์ ํฉ์ ๋ค์ ํญ์ผ๋ก ํ๋ ์์ด
0,1,1,2,3,5,8,13,...
- ํผ๋ณด๋์น ์์ด์ i๋ฒ์งธ ๊ฐ์ ๊ณ์ฐํ๋ ํจ์ F๋ฅผ ์ ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์
- ์์ ์ ์๋ก๋ถํฐ ํผ๋ณด๋์น ์์ด์ i๋ฒ์งธ ํญ์ ๋ฐํํ๋ ํจ์๋ฅผ ์ฌ๊ท ํจ์๋ก ๊ตฌํํ ์ ์์
ํผ๋ณด๋์น ์๋ฅผ ๊ตฌํ๋ ์ฌ๊ท ํจ์
ํผ๋ณด๋์น ์์ด์ ๊ตฌํ๋ ํจ์์ ์๊ณ ๋ฆฌ์ฆ
def fibo(n):
if n<2:
return n
else:
return fibo(n-1)+fibo(n-2)
-> ์์ฒญ๋ ์ค๋ณต ํธ์ถ์ด ์กด์ฌํ๋ค๋ ๋ฌธ์ ์ !
-> ๊ฐ์ ์
๋ ฅ๊ฐ์ ๋ํ ํจ์ ํธ์ถ์ด ๋ง์ด ์ค๋ณต๋จ์ ํ์ธํ ์ ์๋ค.
์ด๋ฌํ ๋จ์ ์ ๋ณด์ํ ์ ์๋ ํ๋ก๊ทธ๋จ ๊ธฐ๋ฒ์ด Memoization
Memoization
Memoization์ ์๋ฏธ
- ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ์คํํ ๋ ์ด์ ์ ๊ณ์ฐํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด์ ๋งค๋ฒ ๋ค์ ๊ณ์ฐํ์ง ์๋๋ก ํ์ฌ ์ ์ฒด์ ์ธ ์คํ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ ๊ธฐ์
- DP(๋์ ๊ณํ๋ฒ)์ ํต์ฌ์ด ๋๋ ๊ธฐ์
Memoization ๋จ์ด์ ์๋ฏธ
- ๊ธ์ ๊ทธ๋๋ก ํด์ํ๋ฉด '๋ฉ๋ชจ๋ฆฌ์ ๋ฃ๊ธฐ(to put in memory)'๋ผ๋ ์๋ฏธ
- '๊ธฐ์ต๋์ด์ผ ํ ๊ฒ'์ด๋ผ๋ ๋ป์ ๋ผํด์ด Memorandum์์ ํ์
- ํํ '๊ธฐ์ตํ๊ธฐ', '์๊ธฐํ๊ธฐ'๋ผ๋ ๋ป์ Memorization๊ณผ ํผ๋ํ์ง๋ง, ์ ํํ ๋จ์ด๋ Memoization์ผ๋ก ๋์ฌํ์ memoize์ด๋ค.
Memoization ๋ฐฉ๋ฒ์ ์ ์ฉํ ์๊ณ ๋ฆฌ์ฆ
ํผ๋ณด๋์น ์๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์์ fibo(n)
์ ๊ฐ์ ๊ณ์ฐํ์๋ง์ ์ ์ฅํ๋ฉด ์คํ์๊ฐ์ ์ค์ผ ์ ์๋ค.
# memo๋ฅผ ์ํ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๊ณ ,
# memo[0]์ 0์ผ๋ก memo[1]๋ 1๋ก ์ด๊ธฐํํ๋ค.
def fibo1(n):
global memo
if n>=2 and len(memo)<=n:
memo.append(fibo1(n-1)+fibo1(n-2))
return memo[n]
memo=[0,1]
- ์กฐ๊ฑด๋ฌธ์์ memo๋ผ๋ ๋ฆฌ์คํธ์ ๊ฐ์ด ์ ์ฅ๋์ด ์๋์ง ์๋์ง๋ฅผ ์กฐ์ฌ.
- ๋ง์ฝ ๊ธฐ์กด์ ๊ณ์ฐํ์ฌ ์ ์ฅ๋ ๊ฐ์ด ์์ ๊ฒฝ์ฐ์๋ ๋ค์ ๊ณ์ฐํ์ง ์๊ฒ ๋ค๋ ์๊ณ ๋ฆฌ์ฆ
DP(๋์ ๊ณํ๋ฒ)
DP(๋์ ๊ณํ๋ฒ) ์๊ณ ๋ฆฌ์ฆ
- Dynamic Programming์ ์ฝ์
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ด ์ต์ ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ
- ๋จผ์ ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์์ ๋ถ๋ถ ๋ฌธ์ ๋ค์ ๋ชจ๋ ํด๊ฒฐํ ํ์, ๊ทธ ํด๋ค์ ์ด์ฉํ์ฌ ๋ณด๋ค ํฐ ํฌ๊ธฐ์ ๋ถ๋ถ ๋ฌธ์ ๋ค์ ํด๊ฒฐ
- ์ต์ข ์ ์ผ๋ก ์๋ ์ฃผ์ด์ง ์ ๋ ฅ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ๊ธฐ๋ฒ
DP(๋์ ๊ณํ๋ฒ)๋ฅผ ์ ์ฉํ ํผ๋ณด๋์น ์
ํผ๋ณด๋์น ์๋ฅผ ๊ตฌํ๋ ํจ์์ DP ์ ์ฉํ๊ธฐ
-> ๋ถ๋ถ ๋ฌธ์ ์ ๋ต์ผ๋ก๋ถํฐ ๋ณธ ๋ฌธ์ ์ ๋ต์ ์ป์ ์ ์๋ ์ต์ ๋ถ๋ถ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ์์ด DP๋ฅผ ์ ์ฉํ ์ ์๋ค.
-
๋ฌธ์ ๋ฅผ ๋ถ๋ถ ๋ฌธ์ ๋ก ๋ถํ
์ต์ข ์ ์ผ๋ก ๋จ์์์์ธ ๋ถ๋ถ์งํฉ์ผ๋ก ๋๋ ์ ์๋ค. -
๋ถ๋ถ ๋ฌธ์ ๋ก ๋๋๋ ์ผ์ ๋๋์ผ๋ฉด ๊ฐ์ฅ ์์ ๋ถ๋ถ ๋ฌธ์ ๋ถํฐ ํด๋ฅผ ๊ตฌํจ
-
๊ทธ ๊ฒฐ๊ณผ๋ ํ ์ด๋ธ์ ์ ์ฅํ๊ณ , ํ ์ด๋ธ์ ์ ์ฅ๋ ๋ถ๋ถ ๋ฌธ์ ์ ํด๋ฅผ ์ด์ฉํ์ฌ ์์ ๋ฌธ์ ์ ํด๋ฅผ ๊ตฌํจ
ํผ๋ณด๋์น ์๋ฅผ DP์ ์ ์ฉํ ์๊ณ ๋ฆฌ์ฆ
def fibo2(n):
f=[0,1]
for i in range(2, n+1):
f.append(f[i-1]+f[i-2])
return f[n]
๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ์์๊ฐ๋ถํฐ ์์๋ก ๊ตฌํด๋๊ฐ
DP ๊ตฌํ ๋ฐฉ์
ํฌ๊ฒ 2๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
1. recursive ๋ฐฉ์ : fibo1()
ํจ์์ ํธ์ถ์ ์ด์ฉํ ์ฌ๊ท์ ๋ฐฉ๋ฒ
์ฌ๊ท์ ๊ตฌ์กฐ๋ ๋ด๋ถ์ ์์คํ
ํธ์ถ ์คํ์ ์ฌ์ฉํ๋ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์๋ค.
2. iterative ๋ฐฉ์ : fibo2()
๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ ๋ฐ๋ณต์ ๋ฐฉ๋ฒ
Memoization์ ์ฌ๊ท์ ๊ตฌ์กฐ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ฐ๋ณต์ ๊ตฌ์กฐ๋ก DP๋ฅผ ๊ตฌํํ ๊ฒ์ด ์ฑ๋ฅ๋ฉด์์ ๋ณด๋ค ํจ์จ์ ์ด๋ค!
DFS(๊น์ด ์ฐ์ ํ์)
DFS(๊น์ด ์ฐ์ ํ์)์ด๋?
๋น์ ํ๊ตฌ์กฐ์ธ ๊ทธ๋ํ ๊ตฌ์กฐ๋ ๊ทธ๋ํ๋ก ํํ๋ ๋ชจ๋ ์๋ฃ๋ฅผ ๋น ์ง์์ด ๊ฒ์ํ๋๊ฒ์ด ์ค์ํ๋ค.
์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ 2๊ฐ์ง ์กด์ฌ
1. ๊น์ด ์ฐ์ ํ์(Depth First Search, DFS) -> ์คํ ์ด์ฉ
2. ๋๋น ์ฐ์ ํ์(Breadth First Search, BFS)
DFS ๋ฐฉ๋ฒ
- ์์ ์ ์ ์ ํ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์๋ ๊ณณ๊น์ง ๊น์ด ํ์
- ๋ ์ด์ ๊ฐ๊ณณ์ด ์๊ฒ ๋๋ฉด, ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ง๋ฌ๋ ๊ฐ๋ฆผ๊ธธ ๊ฐ์ ์ด ์๋ ์ ์ ์ผ๋ก ๋๋์์ด
- ๋ค๋ฅธ ๋ฐฉํฅ์ ์ ์ ์ผ๋ก ํ์์ ๊ณ์ ๋ฐ๋ณตํ์ฌ ๊ฒฐ๊ตญ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ์ฌ ์ํ
๊ฐ์ฅ ๋ง์ง๋ง์ ๋ง๋ฌ๋ ๊ฐ๋ฆผ๊ธธ์ ์ ์ ์ผ๋ก ๋๋์๊ฐ์ ๋ค์ ๊น์ด ์ฐ์ ํ์์ ๋ฐ๋ณตํด์ผ ํ๋ฏ๋ก ํ์ ์ ์ถ ๊ตฌ์กฐ์ ์คํ์ ์ฌ์ฉ
DFS ์๊ณ ๋ฆฌ์ฆ
์คํ์ด ๊ณต๋ฐฑ์ด ๋ ๋๊น์ง ์์ ๊ณผ์ ์ ๋ฐ๋ณต
DFS์ ์
๊ฒ์ํ๊ณ ์ ํ๋ ๊ทธ๋ํ
A๋ถํฐ G๊น์ง ์ ์ ๊ฐ์ง๋ฉฐ ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์์
-
๊ฒฝ๋ก๋ฅผ ์ญ์ถ์ ํ ๋ ํ์ํ ์คํ ์๋ฃ๊ตฌ์กฐ์ ์ ์ ์ ๋ฐฉ๋ฌธํ๋์ง์ ๋ํ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ visited ๋ฆฌ์คํธ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์ธ
-
DFS ํจ์๊ฐ ํธ์ถ๋๋ ์์ ์ ๋ฐฉ๋ฌธ์์ ์ ์ ์ด ์ฃผ์ด์ง. ์ด๋ฅผ visited ๋ฆฌ์คํธ์ ๋ฐฉ๋ฌธํ๋ค๊ณ ํ์ํจ (์ฌ๊ธฐ์๋ ์ ์ A๊ฐ ์์ ์ ์ )
-
์ ์ A์ ์ธ์ ์ ์ ์ ์กฐ์ฌํจ. B,C์ 2๊ฐ ์ ์ ์ด ๋ฐฉ๋ฌธ๋์ง ์์๊ฒ์ visited ๋ฆฌ์คํธ๋ฅผ ์กฐ์ฌํ์ฌ ํ์ธํ ์ ์๋ค. ์ด์ค ํ๋๋ฅผ ์ ํ (์ฌ๊ธฐ์๋ ์ํ๋ฒณ ์์ผ๋ก B๋ฅผ ์ ํ)
-
B ์ ์ ์ ๋ณด๋ฅผ w๋ณ์์ ์ ์ฅ. v๋ณ์์ ์ ์ฅ๋ ๋ฐฉ๋ฌธํ ์ ์ ์ ์ ๋ณด๋ฅผ ์คํ์ ์ ์ฅ. ์ด๋ ์ดํ ๋๋์์ฌ ์ ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋๊ฒ์ด๋ค.
-
w์ ์ ์ฅ๋ ์ ์ ์ ๋ณด๊ฐ ์๋ค๋ฉด w๋ฅผ ๋ฐฉ๋ฌธ, ์ฆ ํ๋ฉด์ ์ ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ณ ๋ฐฉ๋ฌธํ๋ค๋ ์ ๋ณด๋ฅผ ์ ์ฅํจ. ๊ทธ๋ฆฌ๊ณ w์ ์ ์ ์คํ์ push
-
v๋ณ์์ w์ ์ ๋ณด๋ฅผ ์ ์ฅ.
-
v์ ์ , ์ฆ ๋ฐฉ๊ธ ๋ฐฉ๋ฌธํ B ์ ์ ์ ์ด์ํ ์ ์ , A D E ์ค A๋ ๋ฐฉ๋ฌธํ๋ค๊ณ ํ์๋์ด ์๊ณ D์ E์ค D๋ฅผ ์ ํํ์ฌ w์ ์ ์ฅ.
-
5~6๋ฒ ๋ฐ๋ณต
-
D์ ์ด์ํ ์ ์ ์ค, F๋ฅผ ์ ํํ์ฌ w์ ์ ์ฅ
-
5~6๋ฒ ๋ฐ๋ณต
-
F์ ์ด์ํ ์ ์ ์ค, E๋ฅผ ์ ํํ์ฌ w์ ์ ์ฅ
-
5~6๋ฒ ๋ฐ๋ณต
-
E์ ์ด์ํ ์ ์ ์ค, C๋ฅผ ์ ํํ์ฌ w์ ์ ์ฅ
-
5~6๋ฒ ๋ฐ๋ณต
-
C์ ์ด์ํ ์ ์ ์ค, ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด ์์. w๋ ๋น๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ค.
-
w๊ฐ ๋น๊ฐ์ด๋ฏ๋ก ์คํ์์ ํ๋์ ์ ์ ์ ๋ณด๋ฅผ popํ๊ณ ์ด๋ฅผ v์ ์ ์ฅํจ.
-
v์ ์ ์ฅ๋ ์ ์ , C์ ์ด์ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด ์๊ธฐ ๋๋ฌธ์ w๋ ๋น๊ฐ์ ๊ฐ์ง
-
16๋ฒ ๋ฐ๋ณต
-
v์ ์ ์ฅ๋ ์ ์ , E์ ์ด์ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด ์๊ธฐ ๋๋ฌธ์ w๋ ๋น๊ฐ์ ๊ฐ์ง
-
16๋ฒ ๋ฐ๋ณต
-
v์ ์ ์ฅ๋ ์ ์ , F์ ์ด์ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ , G๋ฅผ ์ฐพ์ w์ ์ ์ฅ.
-
v์ ์ ์ฅ๋ ์ ์ ์ ๋ณด F๋ฅผ ์คํ์ ์ ์ฅ.
-
5~6๋ฒ ๋ฐ๋ณต
-
G์ ์ด์ํ ์ ์ ์ค, ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด ์์ผ๋ฏ๋ก w๋ ๋น๊ฐ์ ๊ฐ์ง
-
16๋ฒ ๋ฐ๋ณต
-
24๋ฒ ๋ฐ๋ณต
-
16๋ฒ ๋ฐ๋ณต
-
21๋ฒ ๋ฐ๋ณต
-
16๋ฒ ๋ฐ๋ณต
-
v์ ์ ์ฅ๋ ์ ์ , D์ ์ด์ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด ์๊ธฐ ๋๋ฌธ์ w๋ ๋น๊ฐ์ ๊ฐ์ง
-
16๋ฒ ๋ฐ๋ณต
-
v์ ์ ์ฅ๋ ์ ์ , B์ ์ด์ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด ์๊ธฐ ๋๋ฌธ์ w๋ ๋น๊ฐ์ ๊ฐ์ง
-
16๋ฒ ๋ฐ๋ณต
-
v์ ์ ์ฅ๋ ์ ์ , A์ ์ด์ ์ ์ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ด ์๊ธฐ ๋๋ฌธ์ w๋ ๋น๊ฐ์ ๊ฐ์ง
-
w๊ฐ ๋น ๊ฐ์ด๋ฏ๋ก ์คํ์์ popํ๋ ค ํ์ง๋ง ์คํ์ด ๋น์ด์์. ๋ฐ๋ผ์ v๋ ๋น๊ฐ์ ๊ฐ์ง๋ฉฐ v๊ฐ ๋น๊ฐ์ด๋ฏ๋ก ํจ์๋ฅผ ์ข ๋ฃํ๋ค.
์ ๋ฆฌ
- ๊น์ด ์ฐ์ ํ์์ ์์๋ฅผ ๋ฐ๋ผ๊ฐ๋ณด๋ฉด A,B,D,F,E,C,G ์์ผ๋ก ํ์ํจ.
-> ํ ์ชฝ ๋ฐฉํฅ์ผ๋ก ๊ณ์ ํ์ํ๋ค๊ฐ ๋ ์ด์ ์งํํ ์ ์์ผ๋ฉด ๋ค์ ๋๋์์ค๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์ํ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ - ๋ค์ ๋๋์ ์ค๊ธฐ ์ํด ์ฌ์ฉํ ์๋ฃ๊ตฌ์กฐ๋ก ์คํ์ ์ฌ์ฉํ๋ค๋๊ฒ์ ๊ธฐ์ตํด์ผ ํ๋ค.
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ค[์๊ณ ๋ฆฌ์ฆ] SW Expert ํ์ด์ฌ SW๋ฌธ์ ํด๊ฒฐ ๊ธฐ๋ณธ - Stack1 ๊ฐ์), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@wish/์๊ณ ๋ฆฌ์ฆ-SW-Expert-ํ์ด์ฌ-SW๋ฌธ์ ํด๊ฒฐ-๊ธฐ๋ณธ-Stack1-๊ฐ์์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค