[๋ฐฑ์ค]2667-๋จ์ง
๐ก๋ฌธ์ ๋ถ์ ์์ฝ
-- ๋ฌธ์ --
์ ๋ ฅ : N(์ง๋ ํฌ๊ธฐ)
1์ ์ง์ด ์๋ ๊ณณ, 0์ ์ง์ด ์๋ ๊ณณ
์ฐ๊ฒฐ๋ ์ง์ ๋ชจ์์ธ ๋จ์ง๋ฅผ ์ ์, ๋จ์ง์ ๋ฒํธ ๋ถ์ด๊ธฐ
์ฐ๊ฒฐ๋์๋ค๋ ๊ฒ= ์ข์ฐ, ์์๋๋ก ๋ค๋ฅธ ์ง์ด ์๋ ๊ฒฝ์ฐ
๋จ์ง ์ ์ถ๋ ฅ, ์ง์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
๐ก์๊ณ ๋ฆฌ์ฆ ์ค๊ณ
input์ ํตํด N ์ ๋ ฅ
BFS
dfs, bfs ํจ์ ์ด์ฉ
๐ก์ฝ๋
from collections import deque
def bfs(graph, i, j):
N = len(graph)
need_visited = deque([])
need_visited.append((i, j))
๐ก์๊ฐ๋ณต์ก๋
O(N)
๐กํ๋ฆฐ ์ด์
- ๋ค์๋ ๋ํ๋ก ์ค๋นํ๋๋ฐ ์๊ฐ์ด ๋ชจ์๋ผ ์ถฉ๋ถํ ์๊ฐํ ์๊ฐ์ด ๋ถ์กฑํจ. ๋ํ๋๋๊ณ ๋ค์ ํ์ด๋ณผ ์์ .
๐กํ๋ฆฐ ๋ถ๋ถ ์์ or ๋ค๋ฅธ ํ์ด
from collections import deque
def bfs(graph, i, j):
N = len(graph)
need_visited = deque([])
need_visited.append((i, j))
graph[i][j] = '0'
num_apt = 1
# ์ํ์ข์ฐ ํ์
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
while need_visited:
x, y = need_visited.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 >= N:
continue
if graph[nx][ny] == '1':
need_visited.append((nx, ny))
graph[nx][ny] = '0'
num_apt += 1
return num_apt
N = int(input())
graph = []
for i in range(N):
nodes = list(input())
graph.append(nodes)
cnt = []
for i in range(N):
for j in range(N):
if graph[i][j] == '1':
cnt.append(bfs(graph, i, j))
cnt.sort()
print(len(cnt))
for c in cnt:
print(c)
๐ก๋๋์ or ๊ธฐ์ต ํ ์ ๋ณด
์ฒ์ ์ฝํ ๋ฅผ ์ ํ๋ค๋ณด๋ ์ ๊ทผํ๋๋ฐ ์ด๋ ค์์ ๋๋. -> ๋ฌธ์ ๋ง์ด ์ ํด๋ณด๊ธฐ.
๊ฐ๋ ๋ง ๊ณต๋ถํ์ง ๋ง๊ณ ๊ธฐ๋ณธ ๊ตฌํํ ์ฝ๋ ๋ง์ด ์ ํด๋ณด๊ธฐ.
๋ค์๋ ๋ํ๋ก ์ค๋นํ๋๋ฐ ์๊ฐ์ด ๋ชจ์๋ผ ์ถฉ๋ถํ ์๊ฐํ ์๊ฐ์ด ๋ถ์กฑํจ. ๋ํ๋๋๊ณ ๋ค์ ํ์ด๋ณผ ์์ . ๋จ์ง ํ์ด์ดํด๋ก ๋๋จ.
ย