첫 번째
def adjacent_node(x, y): # 인접한 노드 계산하는 함수
adjacent = []
for dx, dy in ((-1, 0), (1, 0), (0, -1), (0, 1)):
nx, ny = x + dx, y + dy
if 0 <= nx < N and 0 <= ny < N:
adjacent.append((nx, ny))
return adjacent
def dfs(i, j, visited):
count = 1
visited[i][j] = True
stack = []
stack.append((i, j))
while stack:
x, y = stack.pop()
adjacent = adjacent_node(x, y)
for x, y in adjacent:
if not visited[x][y] and map[x][y] == 1:
visited[x][y] = True
count += 1
stack.append((x, y))
return count
N = int(input())
map = []
for i in range(N):
map.append(list(map(int, input())))
visited = [[False for _ in range(N)] for _ in range(N)]
network = 0 # 단지 수
house = [] # 단지 안에 있는 집 수
for i in range(N):
for j in range(N):
if not visited[i][j] and map[i][j] == 1:
network += 1
house.append(dfs(i, j, visited))
print(network)
house = sorted(house) # 문제에서 오름차순으로 출력하라는 것 못 찾아서 헤맸음
for i in house:
print(i)
2차원 형태로 0,1이 주어졌으므로 DFS/BFS 문제이고 둘 중 어떤 방식으로 풀어도 상관없다. 나는 DFS방식으로 풀었다.
if not visited[i][j] and map[i][j] == 1
노드를 방문하지 않았고 map에서 1인 값만 통과하도록 if문으로 제한을 뒀다.if 0 <= nx < N and 0 <= ny < N
통해서 map의 바깥으로 넘어가지 않도록 제한했다.