๋ฌธ์
<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ ์ฌ๊ฐํ ๋ชจ์์ ์ง๋๊ฐ ์๋ค. 1์ ์ง์ด ์๋ ๊ณณ์, 0์ ์ง์ด ์๋ ๊ณณ์ ๋ํ๋ธ๋ค. ์ฒ ์๋ ์ด ์ง๋๋ฅผ ๊ฐ์ง๊ณ ์ฐ๊ฒฐ๋ ์ง์ ๋ชจ์์ธ ๋จ์ง๋ฅผ ์ ์ํ๊ณ , ๋จ์ง์ ๋ฒํธ๋ฅผ ๋ถ์ด๋ ค ํ๋ค. ์ฌ๊ธฐ์ ์ฐ๊ฒฐ๋์๋ค๋ ๊ฒ์ ์ด๋ค ์ง์ด ์ข์ฐ, ํน์ ์๋์๋ก ๋ค๋ฅธ ์ง์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ๋๊ฐ์ ์์ ์ง์ด ์๋ ๊ฒฝ์ฐ๋ ์ฐ๊ฒฐ๋ ๊ฒ์ด ์๋๋ค. <๊ทธ๋ฆผ 2>๋ <๊ทธ๋ฆผ 1>์ ๋จ์ง๋ณ๋ก ๋ฒํธ๋ฅผ ๋ถ์ธ ๊ฒ์ด๋ค. ์ง๋๋ฅผ ์ ๋ ฅํ์ฌ ๋จ์ง์๋ฅผ ์ถ๋ ฅํ๊ณ , ๊ฐ ๋จ์ง์ ์ํ๋ ์ง์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์ง๋์ ํฌ๊ธฐ N(์ ์ฌ๊ฐํ์ด๋ฏ๋ก ๊ฐ๋ก์ ์ธ๋ก์ ํฌ๊ธฐ๋ ๊ฐ์ผ๋ฉฐ 5≤N≤25)์ด ์ ๋ ฅ๋๊ณ , ๊ทธ ๋ค์ N์ค์๋ ๊ฐ๊ฐ N๊ฐ์ ์๋ฃ(0ํน์ 1)๊ฐ ์ ๋ ฅ๋๋ค.
์ถ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์๋ ์ด ๋จ์ง์๋ฅผ ์ถ๋ ฅํ์์ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ๋จ์ง๋ด ์ง์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ํ ์ค์ ํ๋์ฉ ์ถ๋ ฅํ์์ค.
https://www.acmicpc.net/problem/2667
๐ก ํ์ด ๋ฐ ์ฝ๋
n = int(input())
graph = []
for i in range(n):
graph.append(list(map(int,input())))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
count = 0
def dfs(x, y):
global count
if x<0 or x>=n or y<0 or y>=n:
return 0
if graph[x][y]==0:
return 0
graph[x][y] = 0
count += 1
for i in range(4):
dfs(x+dx[i], y+dy[i])
return count
result = []
for i in range(n):
for j in range(n):
r = dfs(i, j)
if r:
result.append(r)
count = 0
print(len(result))
result.sort()
for i in result:
print(i)
DFS์ BFS ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ ํ์ด๊ฐ ๊ฐ๋ฅํ์ง๋ง DFS ํ์ด ์ฐ์ต์ ์ํด DFS ๋ฐฉ์์ ์ ์ฉํด๋ณด์๋ค.
์ฌ๊ทํจ์๋ฅผ ์ฌ์ฉํ์ฌ DFS ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ์ผ๋ฉฐ, count๋ผ๋ global ๋ณ์๋ก ๊ฐ ๋จ์ง ์ ์ง์ ์๋ฅผ ์ธ์ด ๋ฐฐ์ด์ ๋ฃ์๋ค๊ฐ ์ดํ์ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํด ์ด ๋จ์ง ์๋ก ๋์ฒดํ์๋ค.
'Algorithm > ๐ Baekjoon Judge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 2468๋ฒ ์์ ์์ญ - ํ์ด์ฌ(Python) (0) | 2021.07.18 |
---|---|
[BOJ] ๋ฐฑ์ค 2583๋ฒ ์์ญ ๊ตฌํ๊ธฐ - ํ์ด์ฌ(Python) (0) | 2021.07.17 |
[BOJ] ๋ฐฑ์ค 1697๋ฒ ์จ๋ฐ๊ผญ์ง - ํ์ด์ฌ(Python) (0) | 2021.07.15 |
[BOJ] ๋ฐฑ์ค 7576๋ฒ ํ ๋งํ - ํ์ด์ฌ(Python) (0) | 2021.07.15 |
[BOJ] ๋ฐฑ์ค 2178๋ฒ ๋ฏธ๋ก ํ์ - ํ์ด์ฌ(Python) (0) | 2021.07.15 |