๐งฎ PS
๋ฐฑ์ค (boj) ํ์ด์ฌ - 2468๋ฒ: ์์ ์์ญ
Newmon
2021. 8. 25. 18:51
#๋ฌธ์ ๋งํฌ :https://www.acmicpc.net/problem/2468
2468๋ฒ: ์์ ์์ญ
์ฌ๋๋ฐฉ์ฌ์ฒญ์์๋ ๋ง์ ๋น๊ฐ ๋ด๋ฆฌ๋ ์ฅ๋ง์ฒ ์ ๋๋นํด์ ๋ค์๊ณผ ๊ฐ์ ์ผ์ ๊ณํํ๊ณ ์๋ค. ๋จผ์ ์ด๋ค ์ง์ญ์ ๋์ด ์ ๋ณด๋ฅผ ํ์ ํ๋ค. ๊ทธ ๋ค์์ ๊ทธ ์ง์ญ์ ๋ง์ ๋น๊ฐ ๋ด๋ ธ์ ๋ ๋ฌผ์ ์ ๊ธฐ์ง ์๋
www.acmicpc.net
#๋์ด๋ : Silver1
#๋ถ๋ฅ : DFS
#์ ๊ทผ๋ฐฉ๋ฒ
DFS๋ฅผ ํตํด ์์ฌ๋ณด๋ค ๋ฎ์ ์ง์ญ์ 0์ผ๋ก ๋ฐ๊พธ๊ณ , ๊ทธ ์ด์ธ์ ์ง์ญ์ด ๋ช๊ฐ์ ๋ฒ์๊ฐ ๋๋์ง ํ์ธํ๋ค. ์ด๋ ์์ฌ์ ๊ฐ์ฅ ๋ฎ์ ์ง์ญ ~ ๊ฐ์ฅ ๋์ ์ง์ญ์ ๋ฒ์๋ก +1์ฉ ์ฆ๊ฐ์ํค๋ฉฐ ๋ชจ๋ ํ์ธํด๋ณธ๋ค.
๋ฌธ์ ์์ ๋ฌผ์ ์ ๊ธฐ์ง ์์์๋ ์๋ค ๋ผ๋ ์กฐ๊ฑด์ ๊ฑธ์์ผ๋ฏ๋ก, ์ ๋ต์ ๋ด์ ๋ฐฐ์ด์๋ 1์ ํ๋ ๋ฃ์ด์ค๋ค. (๋ต์ด ๋ ์ ์๋ ์ต์๊ฐ์ด 1์ด๋ฏ๋ก)
Code(Python)
from sys import setrecursionlimit
setrecursionlimit(10000)
n = int(input())
grid = []
cnt = 0
visited = [[False for i in range(n)] for i in range(n)]
for _ in range(n):
grid.append(list(map(int, input().split())))
def is_valid(x,y):
if x >= 0 and x < n and y < n and y >= 0:
return True
return False
def dfs(x,y):
if not is_valid(x,y):
return False
if visited[x][y] == False and grid[x][y] != 0:
visited[x][y] = True
dfs(x+1,y)
dfs(x-1,y)
dfs(x,y+1)
dfs(x,y-1)
return True
return False
def rain(depth):
global visited
visited = [[False for i in range(n)] for i in range(n)]
for x in range(n):
for y in range(n):
if grid[x][y] <= depth:
grid[x][y] = 0
min_depth = min(min(grid))
max_depth = max(max(grid))
depth = min_depth
answers = [1]
while(depth <= max_depth):
rain(depth)
cnt = 0
for x in range(n):
for y in range(n):
if dfs(x,y):
cnt += 1
answers.append(cnt)
depth += 1
print(max(answers))