BOJ 1926 : ๊ทธ๋ฆผ (Python)
๋ฌธ์
https://www.acmicpc.net/problem/1926
1926๋ฒ: ๊ทธ๋ฆผ
์ด๋ค ํฐ ๋ํ์ง์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์์ ๋, ๊ทธ ๊ทธ๋ฆผ์ ๊ฐ์์, ๊ทธ ๊ทธ๋ฆผ ์ค ๋์ด๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด๋ผ๋ ๊ฒ์ 1๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ํ ๊ทธ๋ฆผ์ด๋ผ๊ณ ์ ์ํ์. ๊ฐ๋ก๋ ์ธ๋ก
www.acmicpc.net
์ฝ๋
import sys
sys.setrecursionlimit(10**7)
def dfs(x,y):
global temp
if x<=-1 or x>=n or y<=-1 or y>=m:
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)
temp += 1
return True
return False
n,m = map(int, input().split())
graph = []
for i in range(n):
graph.append(list(map(int, input().split())))
result = 0
maximum = 0
for i in range(n):
for j in range(m):
temp = 0
if dfs(i, j) == True:
result += 1
if maximum < temp:
maximum = temp
print(result)
print(maximum)
ํ์ด
์ด์ฝํ ๊ฐ์์์ ๋์จ ๋ฌธ์ ์ ์ ์ฌํด์ ๊ทธ ์ฝ๋์์ ์ข๋ง ๋ ์ถ๊ฐํด์ ๋ฌธ์ ๋ฅผ ํ์๋ค... ๋ค์ ๊ธฐ์ตํด๋ด์ ํผ์ํด๋ณด๋ ค๋๊น ๊ธฐ์ต์ด ์๋๋๋ผ.. ๋ณต์ตํด์ผํ๋๋ฐ...
1์ด ๋ถ์ด์๋ ๊ฒ๋ค์ด ๊ทธ๋ฆผ์ ํด๋นํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ ์์๋ฅผ ๊ธฐ์ ์ผ๋ก ์ํ์ข์ฐ์ 1์ด ์์ผ๋ฉด ๊ทธ๋ฆผ์ผ๋ก ์ทจ๊ธํ๋ฉด ๋๋ค. ์ด๋ ๊ฒ DFS๋ฅผ ์ด์ฉํด์ ๋ชจ๋ ์์๋ฅผ ํ์ธํด๋ณธ๋ค.
dfs ๋ฉ์๋๊ฐ True๋ฅผ ๋ฆฌํดํ๋ฉด(graph[i][j]๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฃผ๋ณ์ ๊ทธ๋ฆผ ์ฌ๋ถ ํ์์ด ๋๋๋ฉด) result ๋ผ๋ ๋ณ์์๋ 1์ ๋ํด์ ๊ทธ๋ฆผ์ ์ด ๊ฐ์๋ฅผ ์ธก์ ํ๋ค.
๊ทธ๋ฆฌ๊ณ dfs ํ์์ด ํ๋ฒ ๋๋ ๋๋ง๋ค temp ๋ผ๋ ๋ณ์์ 1์ ๋ํด์ ๊ทธ๋ฆผ์ ํฌ๊ธฐ๋ฅผ ์ธก์ ํ๋ค.
maximum ๋ณ์๊ฐ temp๋ณด๋ค ์์ผ๋ฉด maximum์ temp ๊ฐ์ ๋์ ํด์ ๊ฐ์ฅ ํฐ ๊ทธ๋ฆผ์ ํฌ๊ธฐ๋ฅผ ์ ์ฅํ ์ ์๋๋ก ํ๋ค.
์ฒ์์ ๋ฐฑ์ค์์ Recursive error๊ฐ ๋ฌ์๋๋ฐ ํ์ด์ฌ์ ์ฌ๊ท ํ๋๋ฅผ ๋์ด์์ ์๊ธด ์ค๋ฅ๋ผ๊ณ ํ๋ค. ๊ตฌ๊ธ๋ง์ ํด๋ณด๋
sys.setrecursionlimit(10**7)
์์ ๊ฐ์ด ์ฌ๊ท ํ๋๋ฅผ ๋๋ ค์ฃผ๋ฉด ๋๋ค๊ณ ํ๋ค. ๋ญ๊ฐ ์ต์ง๋ก ์ฝ๋๊ฐ ๋์๊ฐ๋๋ก ๋ง๋ ๋๋์ด๋ ... ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๊ฐ์ด ์๋๋ค.