728x90
* DFS 깊이 우선 탐색을 이용하는 문제
* 문제 조건 : 블록은 좌우 , 위아래 로만 연결 가능
* 상하좌우를 파악한 후 주변 값이 1이면 방문.
* 한번 방문한 곳은 방문하지 않음
* 방문하지 않은 지점을 카운트
import sys
#---- DFS ----#
def dfs(x, y, graph, visited):
if x < 0 or x >= len(graph) or y < 0 or y >= len(graph[0]):
return 0
if graph[x][y] == 0 or visited[x][y]:
return 0
visited[x][y] = True
size = 1
size += dfs(x - 1, y, graph, visited)
size += dfs(x, y - 1, graph, visited)
size += dfs(x + 1, y, graph, visited)
size += dfs(x, y + 1, graph, visited)
return size
n = int(input()) # map size
graph = [] # 2D binary matrix representing the map
#---- map matrix ----#
for i in range(n):
graph.append(list(map(int, input())))
visited = [[False] * n for _ in range(n)] # 2D matrix to track visited nodes
sizes = [] # list of sizes of each connected component
#---- number of block ----#
for i in range(n):
for j in range(n):
size = dfs(i, j, graph, visited)
if size > 0:
sizes.append(size)
print(len(sizes))
#---- number of 1 ----#
sizes.sort()
for size in sizes:
print(size)
728x90
'STUDY > Python' 카테고리의 다른 글
[Softeer] 주행거리 비교하기 (0) | 2023.03.27 |
---|---|
[Softeer] 비밀 메뉴 (0) | 2023.03.27 |
[프로그래머스] 최빈값 구하기 (0) | 2023.03.08 |
[프로그래머스] 햄버거 만들기 (0) | 2023.03.08 |
[프로그래머스] 머쓱이보다 키 큰 사람 (1) | 2023.03.08 |