๋ชฉ์ฐจ
* ์ด์ฝํ ํ์ด์ฌ ๊ฐ์๋ฅผ ๋ฃ๊ณ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
ํ์์ด๋?
๋ง์ ์์ ๋ฐ์ดํฐ ์ค์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ณผ์
๋ํ์ ์ธ ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์ DFS์ BFS๊ฐ ์๋ค. ๋งค์ฐ ์์ฃผ ๋ฑ์ฅํ๋ ์ ํ์ด๋ผ์ ๊ผญ ์์งํ๋๋ก ํ์!
์์์ผํ ์๋ฃ๊ตฌ์กฐ : ์คํ
๋จผ์ ๋ค์ด ์จ ๋ฐ์ดํฐ๊ฐ ๋์ค์ ๋๊ฐ๋ ํ์์ธ ์ ์ ํ์ถ(LIFO)์ ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
์ฐ์ฐ
1๏ธโฃ์คํ์ ํ์ด์ฌ์์ ์ฌ์ฉํ๋ ค๋ฉด ํ์ด์ฌ์์์ ๋ฆฌ์คํธ ์๋ฃํ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
stack = []
2๏ธโฃ์ฐ์ฐ
๋ฆฌ์คํธ์ append ์ฐ์ฐ๊ณผ pop์ฐ์ฐ์ ํตํด ์คํ์ ์ฝ์
์ญ์ ์ฐ์ฐ์ ํํํ ์ ์๋ค.
์ฝ์
: append()
์ญ์ : pop()
์ถ๋ ฅ ํํ
- ์ต์๋จ ์์๋ถํฐ ์ถ๋ ฅ : ๊ฐ์ฅ ๋์ค์ ๋ค์ด์จ ์์๋ถํฐ ์ถ๋ ฅ
print(stack[::-1])
- ์ตํ๋จ ์์๋ถํฐ ์ถ๋ ฅ : ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ์์๋ถํฐ ์ถ๋ ฅ
print(stack)
์์์ผํ ์๋ฃ๊ตฌ์กฐ : ํ
ํ๋ ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ FIFO ํ์์ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
ํ์ด์ฌ์์ ํ ๊ตฌํํ๊ธฐ
from collections import deque
ํ์ด์ฌ์์ ํ๋ฅผ ๊ตฌํํ ๋ ๋ฆฌ์คํธ ์๋ฃํ์ ์ฌ์ฉํด์ ๊ตฌํํ ์ ์์ง๋ง ์๊ฐ ๋ณต์ก๋๊ฐ ๋ ๋์ ๋นํจ์จ์ ์ผ๋ก ๋์ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ํ๋ฅผ ๊ตฌํํ๋๋ก ํ๋ค.
1๏ธโฃ ํ๋ deque ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๋ง๋ค์ด์ค๋ค.
queue = deque()
2๏ธโฃ์ฐ์ฐ
- ์ฝ์ : append( )
- ์ญ์ : popleft()
๊ทธ๋ฆผ๊ณผ๋ ๋ค๋ฅด๊ฒ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ค์ด์์ ์ผ์ชฝ์ผ๋ก ๋๊ฐ๋ค!
3๏ธโฃ์ถ๋ ฅ
- ๋จผ์ ๋ค์ด์จ ์์๋๋ก ์ถ๋ ฅ
print(queue)
- ์ญ์์ผ๋ก ๋ฐ๊พผ ํ ๋์ค์ ๋ค์ด์จ ์์๋ถํฐ ์ถ๋ ฅ
queue.reverse()
print(queue)
์ฌ๊ทํจ์(Recursive Function)
์ฌ๊ทํจ์๋ ์๊ธฐ ์์ ์ ๋ค์ ํธ์ถํ๋ ํจ์๋ก DFS๋ฅผ ๊ตฌํํ ๋ ์ค์ง์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
ํ์ด์ฌ์์๋ ์ต๋ ์ฌ๊ท ํธ์ถ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ค์ ์์ด ์ฌ๊ท ํจ์๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ ์ค๋ฅ ๋ฉ์์ง๊ฐ ๋ํ๋ ์ ์๋ค.
์ฌ๊ท ํจ์์ ์ข ๋ฃ ์กฐ๊ฑด
์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํ ๋์๋ ์ฌ๊ท ํจ์์ ์ข ๋ฃ ์กฐ๊ฑด์ ๋ฐ๋์ ๋ช ์ํด์ผํ๋ค
์ฌ๊ท ํจ์์ ์์ ๋ถ๋ถ์ ์ข ๋ฃ ์กฐ๊ฑด์ ๋ช ์ํด์ ํน์ ํ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค๋ฉด ํจ์๊ฐ ์ข ๋ฃ๋ ์ ์๋๋ก ๋ง๋ค ์ ์๋ค.
def recursive_function(i):
# ์ฌ๊ท ํจ์์ ์์ ๋ถ๋ถ์ ์ข
๋ฃ ์กฐ๊ฑด ๋ช
์
if i ==100:
return
print(i, '๋ฒ์งธ ์ฌ๊ทํจ์์์', i+1, '๋ฒ์งธ ์ฌ์ทจํจ์๋ฅผ ํธ์ถํ๋ค.')
recursive_function(i+1)
print(i,'๋ฒ์งธ ์ฌ๊ทํจ์๋ฅผ ์ข
๋ฃํฉ๋๋ค')
recursive_function(1)
์ฌ๊ทํจ์ ์์ : ํฉํ ๋ฆฌ์ผ ๊ตฌํ ์์
- n! = 1 * 2 * 3 * ``` * (n-1) * n
- 0!์ 1!์ ๊ฐ์ 1์ด๋ค.
- ๋ฐ๋ณต์ ์ผ๋ก ๊ตฌํํ n!
def factorial_iterative(n):
result = 1
for i in range(1,n+1):
result *= i
return result
- ์ฌ๊ท์ ์ผ๋ก ๊ตฌํํ n!
def factorial_recursive(n):
if n<=1:
return 1
return n* factorial_recursice(n-1)
์ฌ๊ท ํจ์ ์์ : ์ต๋๊ณต์ฝ์ ๊ณ์ฐ(์ ํด๋ฆฌ๋ ํธ์ ๋ฒ)
- ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ ์ต๋ ๊ณต์ฝ์๋ฅผ ๊ตฌํ๊ณ ์ ํ ๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ
- ๋ ์์ฐ์ A,B์ ๋ํ์ฌ (A>B) A๋ฅผ B๋ก ๋๋ ๋๋จธ์ง๋ฅผ R์ด๋ผ๊ณ ํ์
- ์ด ๋ A์ B์ ์ต๋ ๊ณต์ฝ์๋ B์ R์ ์ต๋๊ณต์ฝ์์ ๊ฐ๋ค
def gcd(a,b):
if a&b ==0
return b
else:
return gcd(b,a%b)
print(gcd(192,162))
์ฌ๊ทํจ์ ์ฌ์ฉ์ ์ ์ ์ฌํญ
1๏ธโฃ๋ชจ๋ ์ฌ๊ท ํจ์๋ ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ๋์ผํ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๊ณ , ๋ฐ๋ณต๋ฌธ์ผ๋ก ๊ตฌํ๋ ๊ฒ์ ์ฌ๊ทํจ์๋ก ๋ฐ๊ฟ ์๋ ์๋ค.
2๏ธโฃ์ฌ๊ท ํจ์๊ฐ ๋ฐ๋ณต๋ฌธ๋ณด๋ค ์ ๋ฆฌํ ๊ฒฝ์ฐ๋ ์๊ณ ๋ถ๋ฆฌํ ๊ฒฝ์ฐ๋ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์ ๋ง๋ ํํ๋ฅผ ๊ณ ๋ คํด์ ํ์ด์ผํ๋ค.
3๏ธโฃ ์ปดํจํฐ๊ฐ ํจ์๋ฅผ ์ฐ์์ ์ผ๋ก ํธ์ถํ๋ฉด ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ ๋ด๋ถ์ ์คํ ํ๋ ์์ ์์ธ๋ค.
๊ทธ๋์ ์คํ์ ์ฌ์ฉํด์ผํ ๋ ๊ตฌํ ์ ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์ ์ ์ฌ๊ท ํจ์๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
DFS(Depth-First Search)
DFS๋ ๊น์ด ์ฐ์ ํ์์ผ๋ก ๊ทธ๋ํ์์ ๊น์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
๊ตฌํ
DFS๋ฅผ ๊ตฌํํ ๋์๋ ์คํ ์๋ฃ๊ตฌ์กฐ๋ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ๋ค.
๋์ ๊ณผ์
1๏ธโฃํ์ ์์ ๋ ธ๋๋ฅผ ์คํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
2๏ธโฃ์คํ์ ์ต์๋จ ๋ ธ๋์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ํ ๋ ธ๋๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด ๊ทธ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํ๋ค. ๋ฐฉ๋ฌด๋ณ์ง์์ ์ธ์ ๋ ธ๋๊ฐ ์๋ค๋ฉด ์คํ์์ ์ต์๋จ ๋ ธ๋๋ฅผ ๊บผ๋ธ๋ค.
3๏ธโฃ๋์ด์ 2๋ฒ์ ๊ณผ์ ์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
step1. ์์ ๋ ธ๋์ธ 1์ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ค.
step2. ์คํ์ ์ต์๋จ ๋ ธ๋์ธ 1์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ 2,3,8์ด ์๋ค.
- ์ด ์ค ๊ฐ์ฅ ์์ ๋ ธ๋์ธ 2๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
step3 : ์ด์ ์คํ์ ์ต์๋จ ๋ ธ๋๋ 2๋ก ๋ฐ๋์๋ค. ์ด์ 2๋ฅผ ๊ธฐ์ค์ผ๋ก DFS๊ฐ ์งํ๋๋ค.
์คํ์ ์ต์๋จ ๋ ธ๋์ธ 2์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ 7์ด ์๋ค.
- ๋ฐ๋ผ์ 7๋ฒ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
step 4 : ์คํ์ ์ต์๋จ ๋ ธ๋์ธ 7์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ 6,8์ด ์๋ค.
- ์ด ์ค์์ ๊ฐ์ฅ ์์ ๋ ธ๋์ธ 6์ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
step 5 : ์คํ์ ์ต์๋จ ๋ ธ๋์ธ 6์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์๋ค.
- ๋ฐ๋ผ์ ์คํ์์ 6๋ฒ ๋ ธ๋๋ฅผ ๊บผ๋ธ๋ค.
step 6 : ์คํ์ ์ต์๋จ ๋ ธ๋์ธ 7์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ 8์ด ์๋ค.
- ๋ฐ๋ผ์ 8๋ฒ ๋ ธ๋๋ฅผ ์คํ์ ๋ฃ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
์ด ๊ณผ์ ์ ๋ฐฉ๋ฌธํ์ ๋ ์ ์ฒด ๋ ธ๋์ ํ์ ์์(์คํ์ ๋ค์ด๊ฐ ์์)๋
ํ์ ์์ : 1 -> 2-> 7 -> 6 -> 8 -> 3 -> 4 -> 5 ์ด๋ค.
DFS ๊ตฌํ ์ฝ๋ ์์๋ณด๊ธฐ
1๏ธโฃ๊ทธ๋ํ ํํ : ๊ฐ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋ ์ ๋ณด๋ฅผ ํํ (2์ฐจ์ ๋ฆฌ์คํธ)
์ธ์ ๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ํํ
0๋ฒ์ ๋น์๋๋ค.
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
2๏ธโฃ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ์ํ 1์ฐจ์ ๋ฆฌ์คํธ
๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๊ฐ์ False ๋ก ์ด๊ธฐํํด์ค๋ค.
์ด ๋ ์ธ๋ฑ์ค 0์ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก 0๋ถํฐ 8๊น์ง 9
visited = [False] * 9
3๏ธโฃDFS ํจ์
def dfs(graph, v, visited):
# ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํด์ค๋ค.
visited[v] = True
print(v , end=" ")
#ํ์ฌ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋
ธ๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐฉ๋ฌธํ๋ค.
for i in graph[v]:
if not visited[i]:
dfs(graph, i, visited)
BFS (Breadth-First Search)
BFS๋ ๋๋น ์ฐ์ ํ์์ผ๋ก ๊ทธ๋ํ์์ ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ์ฐ์ ์ ์ผ๋ก ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
BFS๋ ํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ด์ํ๋ค.
๋์ ๊ณผ์
1๏ธโฃํ์ ์์ ๋ ธ๋๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
2๏ธโฃํ์์ ๋ ธ๋๋ฅผ ๊บผ๋ธ ๋ค์ ํด๋น ๋ ธ๋์ ์ธ์ ๋ ธ๋ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ๋ชจ๋ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
3๏ธโฃ๋์ด์ 2๋ฒ์ ๊ณผ์ ์ ์ํํ ์ ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
BFS ๋์ ์์ ์์๋ณด๊ธฐ
step 0 : ๊ทธ๋ํ๋ฅผ ์ค๋นํ๋ค. ( ๋ฐฉ๋ฌธ ๊ธฐ์ค์ ๋ฒํธ๊ฐ ๋ฎ์ ์ธ์ ๋ ธ๋๋ถํฐ)
์์ ๋ ธ๋๋ 1์ด๋ค.
step 1 : ์์ ๋ ธ๋์ธ 1์ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
step 2 : ํ์์ ๋ ธ๋ 1์ ๊บผ๋ด ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ 2, 3, 8์ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ๋ค.
step 3: ํ์์ ๋ ธ๋ 2๋ฅผ ๊บผ๋ด์ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ 7์ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํ๋ค.
step 4: ํ์์ ๋ ธ๋ 3์ ๊บผ๋ด ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋ 4, 5,๋ฅผ ํ์ ์ฝ์ ํ๊ณ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
step 5 : ํ์์ ๋ ธ๋ 8์ ๊บผ๋ด๊ณ ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ๋ ธ๋๊ฐ ์์ผ๋ฏ๋ก ๋ฌด์ํ๋ค.
์ด๋ฌํ ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ์ ์ฒด ๋ ธ๋์ ํ์ ์์(ํ์ ๋ค์ด๊ฐ ์์)๋
ํ์ ์์ : 1 -> 2-> 3- > 8-> 7 -> 4 -> 5 -> 6
๊ฑฐ๋ฆฌ๊ฐ 1์ธ ๋ ธ๋ 2, 3, 8
๊ฑฐ๋ฆฌ๊ฐ 2์ธ ๋ ธ๋ 7, 4, 5
๊ฑฐ๋ฆฌ๊ฐ 3์ธ ๋ ธ๋ 6
BFS ๊ตฌํ ์ฝ๋ ์์๋ณด๊ธฐ
1๏ธโฃํ๋ฅผ ์ํด์ deque ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ
from collections import deque
2๏ธโฃ๊ทธ๋ํ ํํ : ๊ฐ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋ ์ ๋ณด๋ฅผ ํํ (2์ฐจ์ ๋ฆฌ์คํธ)
๋
ธ๋๊ฐ 1๋ฒ๋ถํฐ 8๋ฒ๊น์ง 8๊ฐ์ด๊ธฐ ๋๋ฌธ์ 0 ์ธ๋ฑ์ค๋ ์ฌ์ฉํ์ง ์๋๋ค.
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
3๏ธโฃ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
visited = [False] * 9
4๏ธโฃBFS ๋ฉ์๋
def bfs(graph, start, visited):
# ํ ๊ตฌํ์ ์ํด deque ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
queue = deque([start])
# ํ์ฌ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌํด์ค๋ค.
visited[start] = True
# ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
while queue:
# ํ์์ ํ๋์ ์์๋ฅผ ๋ฝ์ ์ถ๋ ฅํ๊ธฐ
v = queue.popleft()
print(v,end=' ')
#์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ธ์ ํ ์์๋ค์ ํ์ ์ฝ์
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
๐ฆ์๋ฃ์ ์ผ๋ ค ๋จน๊ธฐ
# ์
๋ ฅ ํ๊ณผ ์ด์ ๊ฐ์
n, m = map(int,input().split())
graph = []
# ๊ทธ๋ํ ์
๋ ฅ ๋ฐ๊ธฐ
for i in range(n):
graph.append(list(map(int,input())))
# dfs ์คํ
def dfs(x,y):
if x<=-1 or x>=n or y<=-1 or y>=m:
return False
if graph[x][y]==0:
graph[x][y]=1
dfs(x-1,y)
dfs(x+1,y)
dfs(x,y-1)
dfs(x,y+1)
return True
return False
icecream = 0
for i in range(n):
for j in range(m):
if dfs(i,j)==True:
icecream+=1
print(icecream)
๐ญ์ด๋ ค์ ๋ ์
๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ด ๋ฌธ์ ๋ dfs๋ก ํ๋ฉด ๋๊ฒ ๋ค! ํ๊ณ ์๊ฐํ๋ ๊ฒ์ด ์ด๋ ค์ ๋ค. ๊ด๋ จ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๊ณ ์ฌ๊ณ ํ๋ฆ์ ์ ๋ฆฝํด์ผ๊ฒ ๋ค
๋ฏธ๋กํ์ถ ๋ฌธ์
์ฒ์์๋ ํ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ผ๋ฉด ๋๋๊น DFS๋ฅผ ํตํด์ ๋ฌธ์ ๋ฅผ ํ๋ ค๊ณ ํ๋ค. ๊ทธ๋ฐ๋ฐ ๋ค์ ์๊ฐํด๋ณด๋ DFS๋ฅผ ํตํด์๋ ์ต์ ์ด๋ ์๋ฅผ ๊ตฌํ ์ ์์๋ค.
๋ฐ๋ผ์ ์์ ์ง์ ์์ ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ์ฐจ๋ก๋๋ก ํ์ํ๋ BFS๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ์๋ค.
์ฒ์ ์๋ชป ๊ตฌํํ ์ฝ๋
n,m = map(int,input().split())
# ๊ทธ๋ํ ์
๋ ฅ
graph =[]
for _ in range(n):
graph.append(list(map(int,input())))
global count
count = 1
def dfs(x,y):
if x<0 or x>n-1 or y<0 or y>m-1:
return False
if graph[x][y] ==1:
graph[x][y] =0
dfs(x+1,y)
dfs(x,y+1)
dfs(x-1,y)
dfs(x,y-1)
return True
return False
for i in range(n):
for j in range(m):
if dfs(i,j)==True:
count+=1
print(count)
BFS ์ฌ์ฉํด์ผํ๋ ์ด์
BFS๋ฅผ ์ฌ์ฉํ๋ฉด ๊ดด๋ฌผ์ด ์๋ 1 ๋ ธ๋๋ง ํ์ํ๋ฉด์, ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ํ์์ด ๊ฐ๋ฅํ๋ค.
from collections import deque
n,m = map(int,input().split())
# ๊ทธ๋ํ ์
๋ ฅ
graph =[]
for _ in range(n):
graph.append(list(map(int,input())))
# ์ ํ ์ข์ฐ ์ด๋ ์ ์์น ๋ณํ
dx = [-1,1,0,0]
dy = [0,0,-1,1]
def bfs(x,y):
queue = deque()
queue.append((x,y))
while queue:
x,y = queue.popleft()
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if nx <0 or nx>=n or ny<0 or ny>=m:
continue
# ๊ดด๋ฌผ์ด ์๋ ๊ฒฝ์ฐ
if graph[x][y] ==0:
continue
# ํด๋น ๋
ธ๋๋ฅผ ์ฒ์ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ์ฐ์๋ง ์ต๋จ ๊ฑฐ๋ฆฌ ๊ธฐ๋ก
# ๋ฐ๋ก count๋ฅผ ํด์ค ํ์ ์์ด +1 ํด์ฃผ๋ฉด ๋์ฐฉํ์ ๋ ์ด๋ ์๋ฅผ ์ ์ ์๋ค.
if graph[nx][ny] == 1:
graph[nx][ny] = graph[x][y] +1
queue.append((nx,ny))
return graph[n-1][m-1]
print(bfs(0,0))
'์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ ๊ธฐ๋ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์ฝํ / python ]: ์ด์ง ํ์ ์๊ณ ๋ฆฌ์ฆ ๋ด์ฉ ์ ๋ฆฌ & ๋ฌธ์ ํ์ด ๊ณผ์ ๊ธฐ๋ก (0) | 2024.05.26 |
---|---|
์ด์ฝํ ํ์ด์ฌ : ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ ๋ฆฌ (0) | 2024.05.05 |
[๊ตฌํ: python]๊ฐ๋ ๊ณผ ๋ฌธ์ ํ์ด ์ ๋ฆฌํ๊ธฐ (1) | 2024.03.28 |
์ด์ฝํ ๊ทธ๋ฆฌ๋ : 1์ด ๋ ๋๊น์ง (0) | 2024.03.22 |
[python : ๊ทธ๋ฆฌ๋]์ซ์ ์นด๋ ๊ฒ์ , min, maxํจ์ ์ ๋๋ก ์ดํดํ๊ธฐ (0) | 2024.03.18 |