๐ญ ํ์ด ๊ณผ์
ํ์ ๋ฌธ์ ๋ก์ BFS์ DFS ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋ ๊ฐ๋ฅํ ๋ฌธ์ ์ด๋ค.
N์ ํฌ๊ธฐ๊ฐ ์ต๋ 25๋ก ๋งค์ฐ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก n2์ ๋ฐฉ๋ฒ์ผ๋ก ๋ชจ๋ ๊ณต๊ฐ์ ํ์ํ๋ฉฐ ์ง์ด ์๋ ๊ณต๊ฐ์ธ 1์ ๋ฐ๊ฒฌํ๋ฉด ๊ทธ ์ง์ ์์ ํ์์ ์์ํ๋ค.
ํ์์ ๋ง์น๊ณ ๊ตฌํด์ง ํฌ๊ธฐ(๋จ์ง ํฌ๊ธฐ)๋ฅผ ๋ฆฌ์คํธ์ appendํ๋ค.
๋ชจ๋ ์ฐ์ฐ์ด ๋ง์น๋ฉด ๋ฆฌ์คํธ์๋ ๋จ์ง๋ค์ ํฌ๊ธฐ๊ฐ ์ ์ฅ๋๋ค.
๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ ๋จ์ง ์๊ฐ ๋๊ณ ,
๋ฆฌ์คํธ๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ์ฌ ์์๋ค์ ์ถ๋ ฅํ๋ ๊ฒ์ผ๋ก ๋ง์น๋ค.
์์ฑ์ธ์ด: Python
BFS
from sys import stdin
from collections import deque
n = int(stdin.readline().rstrip())
square = [list(map(int, list(stdin.readline().rstrip()))) for _ in range(n)]
queue = deque()
villages = []
# ์ข ์ฐ ์ ํ
mx = [0, 0, -1, 1]
my = [-1, 1, 0, 0]
for i in range(n):
for j in range(n):
if square[i][j] == 1:
# ํ์ ์ค 1์ ์ฐพ์ผ๋ฉด ๊ฑฐ๊ธฐ์ bfs ์์
queue.append((i, j))
square[i][j] = 2 # ์์์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
village_size = 1
while queue:
x, y = queue.popleft()
for k in range(4):
nx = x + mx[k]
ny = y + my[k]
if 0 <= nx < n and 0 <= ny < n:
if square[nx][ny] == 1:
queue.append((nx, ny))
square[nx][ny] = 2 # ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
village_size += 1
villages.append(village_size)
print(len(villages))
villages.sort()
for size in villages:
print(size)
DFS
from sys import stdin
n = int(stdin.readline().rstrip())
maps = [list(map(int, list(stdin.readline().rstrip()))) for _ in range(n)]
size = 0
def dfs(x, y):
# ์ ํ ์ข ์ฐ
mx = [-1, 1, 0, 0]
my = [0, 0, -1, 1]
global size, maps, n
maps[x][y] = 2 # ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
size += 1
for k in range(4):
nx = x + mx[k]
ny = y + my[k]
if 0 <= nx < n and 0 <= ny < n:
if maps[nx][ny] == 1:
dfs(nx, ny)
if __name__ == "__main__":
villages = []
for i in range(n):
for j in range(n):
if maps[i][j] == 1:
dfs(i, j)
villages.append(size)
size = 0
villages.sort()
print(len(villages))
for num in villages:
print(num)
'Problem_Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 7569 ํ ๋งํ / BFS (0) | 2021.01.05 |
---|---|
[BOJ] ๋ฐฑ์ค 2644 ์ด์๊ณ์ฐ / BFS, DFS (0) | 2021.01.05 |
[BOJ] ๋ฐฑ์ค 2887 ํ์ฑ ํฐ๋ / ์ต์ ์ ์ฅ ํธ๋ฆฌ(MST), ํฌ๋ฃจ์ค์นผ (0) | 2020.11.21 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๊ฐ์ฅ ๋จผ ๋ ธ๋ / ์ต๋จ ๊ฒฝ๋ก, ๋ค์ต์คํธ๋ผ (0) | 2020.11.21 |
[BOJ] ๋ฐฑ์ค 1647 ๋์ ๋ถํ ๊ณํ / ์ต์ ์ ์ฅ ํธ๋ฆฌ(MST), ํฌ๋ฃจ์ค์นผ (0) | 2020.11.20 |