https://www.acmicpc.net/problem/2667
dfs & 그래프 순회 문제이다. 전역 변수를 설정하였고, 그래프에 방문하지 않았다면 방문시키고 dfs를 진행한다.
단지의 개수, 현재 단지의 크기, 각 단지의 크기를 나누어 저장하고, 각각 출력하는 방식으로 시행해보았다.
#백준 2667: 단지번호붙이기
#dfs
def dfs(x, y):
global count #global variable
if x<=-1 or x>=n or y<=-1 or y>=n: #out of range
return False
if graph[x][y] == 1: #not visited
graph[x][y] = 0
count += 1
dfs(x-1, y)
dfs(x+1, y)
dfs(x, y-1)
dfs(x, y+1)
return True
return False
n = int(input())
graph = []
for i in range(n):
graph.append(list(map(int, input())))
result = 0
count = 0
count_list = []
for i in range(n):
for j in range(n):
if dfs(i, j) == True:
result += 1
count_list.append(count)
count = 0
print(result)
#cnt_list sort & print
count_list.sort()
for i in count_list:
print(i)
반응형
'IT > Algorithm' 카테고리의 다른 글
[python] 백준 1005: ACM Craft (0) | 2025.03.25 |
---|---|
[python] 백준 6887: squares (0) | 2025.03.24 |
[python] 백준 1922: 네트워크 연결 (0) | 2025.03.22 |
[python] 백준 2805: 나무 자르기 (0) | 2025.03.20 |
[python] 백준 1932: 정수 삼각형 (0) | 2025.03.19 |