๋ฌธ์
https://www.acmicpc.net/problem/4963
๋ด ๋ฌธ์ ํ์ด
import sys
sys.setrecursionlimit(10000)
while True:
w, h = map(int, sys.stdin.readline().split())
if w == 0 and h == 0:
break
space = [list(map(int, sys.stdin.readline().split())) for _ in range(h)]
dx = [0, 0, -1, 1, -1, 1, -1, 1]
dy = [-1, 1, 0, 0, -1, 1, 1, -1]
count = 0
def dfs(x, y):
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= h or ny >= w or space[nx][ny] == 0: continue
space[nx][ny] = 0
dfs(nx, ny)
for i in range(h):
for j in range(w):
if space[i][j] == 1:
count += 1
space[i][j] = 0
dfs(i, j)
print(count)
๐ DFS ๋ฌธ์ ๋ก, ์ด์ด์ง ์ฌ๋ค์ ํ ๋ฒ์ ์ฒดํฌํด์ฃผ๋ ๊ฒ์ด ํฌ์ธํธ !
- ์ฃผ์ด์ง ์ง๋ space ๋ฆฌ์คํธ๋ฅผ ์์ฐจ์ ์ผ๋ก ๋๋ฉด์ 1์ด ๋ฑ์ฅํ๋ฉด
๊ทธ ์๋ฆฌ๋ฅผ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ , count๋ฅผ ์ฆ๊ฐ์ํจ ํ dfs ํจ์๋ฅผ ํธ์ถํ๋ค. - dfs ํจ์์์๋ ์ํ์ข์ฐ, ๊ทธ๋ฆฌ๊ณ ๋๊ฐ์ ๊น์ง ์ด 8๊ณณ์ ํ์ํ๊ณ
1์ ๋ฐ๊ฒฌํ๋ฉด ๊ทธ ์๋ฆฌ๋ฅผ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ , ๋ ๊ทธ ์ฃผ๋ณ์ ํ์ํ๊ฒ ํ๋ค.
์ด์ด์ง ๋ชจ๋ ์ฌ์ด 0์ผ๋ก ๋ฐ๋๋ฉด dfs ํจ์๋ ์ข ๋ฃ๋๋ค. - ์ด๋ ๊ฒ ์ด์ด์ง ์ฌ๋ค์ ๋ชจ๋ 0์ผ๋ก ๋ฐ๊พผ ๋ค, ๋ค์ ๋ ๋ค๋ฅธ ์ฌ์ด ์๋์ง ์ฐพ๋๋ค.
๐ก ํผ๋๋ฐฑ
- ๊ต์ฅํ ์ฝ๊ณ , ๊ต์ฅํ ์ ํ์ ์ธ,,! DFS ๋ฌธ์ ์๋ค.
- sys.setrecursionlimit์ ํด์ฃผ์ง ์์ผ๋ฉด ๋ฐํ์ ์๋ฌ๊ฐ ๋๋๋ผ. ๊ผญ ํด์ฃผ์ธ์ฉ
'4๏ธโฃ Python > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python Algorithm] ์ฐ์ํฉ BOJ #1912 (0) | 2022.01.31 |
---|---|
[Python Algorithm] ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ์์ด BOJ #11053 (0) | 2022.01.30 |
[Python Algorithm] ํ ๋งํ BOJ #7576 (0) | 2022.01.30 |
[Python Algorithm] ์ฐ๊ตฌ์ BOJ #14502 (0) | 2022.01.30 |
[Python Algorithm] ์ฐ๊ฒฐ ์์์ ๊ฐ์ BOJ #11724 (0) | 2022.01.29 |
๋๊ธ