3. BFS & DFS
๐ก ๋๋น๋ ๋์ ์ด์ฝํ 2021 ๊ฐ์ ๋ชฐ์๋ณด๊ธฐ ๋ฅผ ๋ณด๋ฉด์ ๊ณต๋ถํ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์์ต๋๋ค. ๋ ์์ธํ ๋ด์ฉ์ ์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ฝ๋ฉ ํ ์คํธ๋ค with ํ์ด์ฌ ์ ์ฐธ๊ณ ํด์ฃผ์ธ์ ๐ ํ์ต ๋๊ตฌ๋ก๋ ๋ฆฌํ๋ ์ ์ฌ์ฉํ๊ณ ์๊ณ ์๋ณธ ์์ค์ฝ๋๋ ๋๋น๋์ Github ์์ ํ์ธํ ์ ์๊ณ ์ค์ค๋ก ๊ณต๋ถํ ์์ค์ฝ๋๋ Github ์์ ํ์ธํ ์ ์์ต๋๋ค.
BFS & DFS
๋ํ์ ์ธ ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ
ํ์์ด๋ ๋ง์ ์์ ๋ฐ์ดํฐ ์ค์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ณผ์ !
DFS/BFS ๋ ์ฝํ ์์ ๋งค์ฐ ์์ฃผ ๋ฑ์ฅํ๋ ์ ํ์!
์์ํ๊ธฐ ์ ์
์คํ
๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋์ค์ ๋๊ฐ๋ ํ์์ ์๋ฃ๊ตฌ์กฐ
์ ์ ํ์ถ
์ ๊ตฌ์ ์ถ๊ตฌ๊ฐ ๋์ผํ ํํ๋ก ์คํ์ ์๊ฐํํจ
์) ๋ฐ์ค์๊ธฐ
๋ค์ํ ์๊ณ ๋ฆฌ์ฆ์์ ์ฌ์ฉ๋จ
์ฐ์ฐ
๋ฆฌ์คํธ๋ฅผ ์คํ ์๋ฃ๊ตฌ์กฐ ๊ตฌํ์ ์ํด ์ด์ฉํ ์ ์์
์ฝ์ : stack.append(n)
์ญ์ : stack.pop()
์ต์๋จ ์์๋ถํฐ ์ถ๋ ฅ : print(stack[::-1])
์ตํ๋จ ์์๋ถํฐ ์ถ๋ ฅ : print(stack)
์๋ฐ
stack ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ ์ ์์
์ฝ์ : push(n)
์ญ์ : pop()
์ต์๋จ ์์์ถ๋ ฅ : peek()
ํ
๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ ํ์์ ์๋ฃ๊ตฌ์กฐ
์ ์ ์ ์ถ
์ ๊ตฌ์ ์ถ๊ตฌ๊ฐ ๋ชจ๋ ๋ซ๋ ค์๋ ํฐ๋๊ณผ ๊ฐ์ ํํ๋ก ์๊ฐํ
์์) ์ํ ๋๊ธฐ์ค
์ฐ์ฐ
๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด์ ๊ตฌํ์ ํ ์ ์๊ฒ ์ง๋ง ์๊ฐ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ค.
๋ฐ๋ผ์ python ์์๋ deque() ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํจ
์ฝ์ : append(n)
์ญ์ : popeleft()
์์๋๋ก ์ถ๋ ฅ : queue
์ญ์์ผ๋ก ๋ฐ๊พธ๊ธฐ : queue.reverse()
java
queue ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ง์ํจ : linkedList
์ฝ์ : offer(n)
์ญ์ : poll()
์์๋๋ก ์ถ๋ ฅ : for loop + q.poll()
์ฌ๊ทํจ์
์๊ธฐ์์ ์ ๋ค์ ํธ์ถํ๋ ํจ์
recursive function
๋จ์ํ ํํ์ ์ฌ๊ทํจ์ ์์
์ฌ๊ทํจ์๋ฅผ ํธ์ถํฉ๋๋ค
๋ฅผ ๋ฌดํํ ์ถ๋ ฅ์ด๋์ ๋ ์ถ๋ ฅํ๋ค๊ฐ ์ต๋ ์ฌ๊ท ๊น์ด ์ด๊ณผ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋จ
์ผ๋ฐ์ ์ผ๋ก ์ฌ๊ทํจ์๋ ํน์ ์กฐ๊ฑด์์ ์ข ๋ฃ๋ ์ ์๋๋ก ์ข ๋ฃ์กฐ๊ฑด์ ๋ช ์ํด์ผํ๋ค.
ํฉํ ๋ฆฌ์ผ ๊ตฌํ๋ฌธ์
n! = 1 * 2 * 3 ... * n
์ํ์ ์ผ๋ก 0! ๊ณผ 1! ์ ๊ฐ์ 1์ด๋ค.
์ด ๋ฌธ์ ๋ 1) ๋ฐ๋ณต์ ์ผ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ๊ณผ 2) ์ฌ๊ทํจ์๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ, 2๊ฐ์ง๊ฐ ์๋ค.
์ต๋๊ณต์ฝ์ ๊ณ์ฐ (์ ํด๋ฆฌ๋ ํธ์ ๋ฒ) ์์
๋ ๊ฐ์ ์์ฐ์์ ๋ํด์ ์ต๋ ๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ด ์๋ค.
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ
๋ ์์ฐ์ A, B ์ ๋ํ์ฌ A๋ฅผ B๋ก ๋๋ ๋๋จธ์ง๋ฅผ R์ด๋ผ๊ณ ํ ๋
A, B์ ์ต๋ ๊ณต์ฝ์๋ B์ R์ ์ต๋ ๊ณต์ฝ์์ ๊ฐ๋ค.
์์) GCD(192, 162)
A / B
192 / 162
162 / 30
30 / 12
12 / 6
6
์ฌ๊ทํจ์ ์ฌ์ฉ์ ์ ์์ฌํญ
์ ํ์ฉํ๋ฉด ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค ์ ์๋ค.
ํ์ง๋ง ๋๋๋ก ์คํ๋ ค ๋ค๋ฅธ์ฌ๋์ด ์ดํดํ๊ธฐ ์ด๋ ค์ด ์ฝ๋๊ฐ ๋ ์ ์์ผ๋ ์ ์คํ๊ฒ ์ฌ์ฉํด์ผํจ
๋ชจ๋ ์ฌ๊ทํจ์๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก ํํ ๊ฐ๋ฅ -> ๊ทธ ๋ฐ๋๋ ๊ฐ๋ฅ
์ฌ๊ท ํจ์๊ฐ ๋ฐ๋ณต๋ฌธ๋ณด๋ค ์ ๋ฆฌํ ๊ฒฝ์ฐ๋ ์๊ณ , ๋ถ๋ฆฌํ ๊ฒฝ์ฐ๋ ์๋ค.
์ปดํจํฐ๊ฐ ํจ์๋ฅผ ์ฐ์์ ์ผ๋ก ํธ์ถํ๋ฉด ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ ๋ด๋ถ์ ์คํ์ ํ๋ ์์ด ์์ธ๋ค.
์คํ ์ฌ์ฉํด์ผํ ๋, ๊ตฌํ์ ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์ ์ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
DFS : Depth First Search
๊น์ด ์ฐ์ ํ์
๊น์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
์คํ ์๋ฃ๊ตฌ์กฐ ํน์ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ๋ค.
๊ตฌ์ฒด์ ์ธ ๋์๊ณผ์
ํ์ ์์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
์คํ์ ์ต์๋จ ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ํ ๋ ธ๋๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด ๊ทธ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ์คํ์์ ์ต์๋จ ๋ ธ๋๋ฅผ ๊บผ๋
๋์ด์ 2๋ฒ ๊ณผ์ ์ ์ํํ ์ ์์๋๊น์ง ๋ฐ๋ณตํ๋ค.
BFS : Breadth First Search
๋๋น ์ฐ์ ํ์
๊ทธ๋ํ์์ ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ๋ฉฐ ๋์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์
ํ์ ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
ํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ธ ๋ค์ ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ค์์ ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
๋ ์ด์ 2๋ฒ์ ๊ณผ์ ์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
์ต๋จ๊ฑฐ๋ฆฌ ๊ตฌํ๋ ๋ฌธ์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ค.
๋์์์
์๋ฃ์ ์ผ๋ ค๋จน๊ธฐ
๋ฌธ์
N * M ํฌ๊ธฐ์ ์ผ์ํ์ด ์๋ค.
๊ตฌ๋ฉ์ด ๋ซ๋ ค์๋ ๋ถ๋ถ์ 0, ์นธ๋ง์ด๊ฐ ์กด์ฌํ๋ ๋ถ๋ถ์ 1๋ก ํ์๋๋ค.
๊ตฌ๋ฉ์ด ๋ซ๋ ค์๋ ๋ถ๋ถ๋ผ๋ฆฌ ์, ํ, ์ข, ์ฐ๋ก ๋ถ์ด์๋ ๊ฒฝ์ฐ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.
์ด๋ ์ผ์ํ์ ๋ชจ์์ด ์ฃผ์ด์ก์ ๋, ์ด ์์ด์คํฌ๋ฆผ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ผ
์) 4 * 5 ์ ์ผ์ํ -> ์์ด์คํฌ๋ฆผ์ด ์ด 3๊ฐ
์ฐ๊ฒฐ์์์ฐพ๊ธฐ ๋ฌธ์
๋ฌธ์ ์กฐ๊ฑด
์ธ๋ก๊ธธ์ด, ๊ฐ๋ก๊ธธ์ด๊ฐ ์ฃผ์ด์ง
์ผ์ํ์ ํํ๊ฐ ์ฃผ์ด์ง
๊ตฌ๋ฉ ๋ถ๋ถ : 0
๋งํ ๋ถ๋ถ : 1
์ ๋ ฅ์์
4 5
00110
00011
11111
00000
์ถ๋ ฅ์์
3
ํด๊ฒฐ
ํด๊ฒฐ์์ด๋์ด
0 ๋ถ๋ถ๋ผ๋ฆฌ ์ฐ๊ฒฐ๋ ๋ฉ์ด๋ฆฌ๊ฐ ๊ณง ์ผ์์ด ๋๋ฏ๋ก, ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผ ํ ๋ฉ์ด๋ฆฌ๋ก ๋ณด๊ณ visited count ๋ฅผ ์ฒดํฌํ๋ฉด ๋๋ค.
DFS ๋ก ํ์ด๋ณด๊ธฐ TIP
ํน์ ํ ์ง์ ์ ์ฃผ๋ณ ์, ํ, ์ข, ์ฐ๋ฅผ ์ดํด๋ณธ ๋ค์ ์ฃผ๋ณ ์ง์ ์ค์์ ๊ฐ์ด '0' ์ด๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ์ง์ ์ด ์๋ค๋ฉด ํด๋น ์ง์ ์ ๋ฐฉ๋ฌธํ๋ค.
๋ฐฉ๋ฌธํ ์ง์ ์์ ๋ค์ ์, ํ, ์ข, ์ฐ๋ฅผ ์ดํผ๋ฉด์ ๋ฐฉ๋ฌธ์ ์งํํ๋ค.
์ด๋ฅผ ๋ฐ๋ณตํ๋ฉด ์ฐ๊ฒฐ๋ ๋ชจ๋ ์ง์ ์ ๋ฐฉ๋ฌธํ ์ ์์
๋ชจ๋ ๋ ธ๋์ ๋ํด์ 1-2๋ฒ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ์ง์ ์ ์๋ฅผ ์นด์ดํธ ํ๋ค.
๋ฏธ๋กํ์ถ๋ฌธ์
๋ฌธ์
N * M ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ ํํ์ ๋ฏธ๋ก๊ฐ ์๋ค.
์ฌ๋ฌ๋ง๋ฆฌ์ ๊ดด๋ฌผ์ด ์ด์ด์ ์ด๋ฅผ ํผํด์ ํ์ถํด์ผํ๋ค.
์ฌ์ฉ์์ ์์น๋ ํ์ฌ (1, 1)์ ์๊ณ ๋ฏธ๋ก์ ํ์ถ๊ตฌ๋ (N, M)์ ์๋ค.
ํ๋ฒ์ ํ์นธ์ฉ๋ง ์ด๋์ด ๊ฐ๋ฅํ๋ค.
๊ดด๋ฌผ์์ผ๋ฉด 0, ๊ดด๋ฌผ ์์ผ๋ฉด 1๋ก ํ์๋์ด์๋ค.
๋ฏธ๋ก๋ ๋ฐ๋์ ํ์ถํ ์ ์๋ ํํ๋ก ๋์ด์๋ค.
ํ์ถ์ ์ํด ์์ง์ฌ์ผํ๋ ์ต์ ์นธ์ ๊ฐ์๋ ๋ฌด์์ผ๊น?
4<= N, M<=200
0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ๋ฏธ๋ก์ ๋ณด๊ฐ ์ฃผ์ด์ง
์์๊ณผ ๋ง์ง๋ง์ ํญ์ 1
์ ๋ ฅ์์
์ถ๋ ฅ์์
10
ํด๊ฒฐ
BFS ๋ก ํด๊ฒฐํจ
์ฒ์ 1,1 ์์ ์์
๋งค๋ฒ ์๋ก์ด ๋ ธ๋์ ๋๋ฌํ ๋ ํด๋น ๋ ธ๋์ ๊ฐ์ +1 ๋ก ๋ฐ๊พธ์ด์ค๋ค.
๋ฐฉ๋ฌธํ ๋ ธ๋์ ๊ฐ์ด 1์ผ๋๋ง move count ๋ก +1 ํ๋ค.
๋ง์ง๋ง ๋ ธ๋์ ๋๋ฌํ ๋๋ ์์ง์ธ ํ์๋ฅผ ์ ์ ์๊ฒ ๋๋ค.
Last updated