https://www.acmicpc.net/problem/2667
2667번: 단지번호붙이기
<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여
www.acmicpc.net
DFS방식으로 해결
n = int(input())
graph = []
num = []
for i in range(n):
graph.append(list(map(int, input()))) #단지 2차원 배열
dx = [0, 0, 1, -1] #상하좌우 이동탐색할 배열
dy = [1, -1, 0, 0]
def DFS(x, y):
if x < 0 or x >= n or y < 0 or y >= n: #탐색의 끝일때 return
return False
if graph[x][y] == 1:
global count
count += 1
graph[x][y] = 0 #탐색 완료된 곳은 0으로 바꿈
for i in range(4): #재귀문을 이용하여 단지의 끝까지 탐색
nx = x + dx[i]
ny = y + dy[i]
DFS(nx, ny)
return True
return False
count = 0
result = 0
for i in range(n):
for j in range(n):
if DFS(i, j) == True: #1인곳을 찾기만 하면 끝까지 탐색 후 true
num.append(count) #단지 내 집 개수
result += 1 #단지 개수
count = 0 #다음 단지를 위해 초기화
num.sort()
print(len(num))
for i in range(len(num)):
print(num[i])
'PROGRAMMING CODE > PYTHON' 카테고리의 다른 글
[BAEKJOON] No.12865 Python (0) | 2023.03.23 |
---|---|
[BAEKJOON] No.9506 Python (0) | 2023.03.22 |
[BAEKJOON] No.9610 Python (0) | 2023.03.22 |
[BAEKJOON] No.10988 Python (0) | 2023.03.22 |
[BAEKJOON] No. 2754 Python (0) | 2023.03.21 |