본문 바로가기
알고리즘 문제풀이/백준

백준 2667

by Hoseok 2023. 4. 5.
728x90
반응형

 

DFS로 구현하려고 하니,

n = int(input())
graph = []
for i in range(n):
  graph.append(list(map(int, input())))

print(graph)

def dfs(x, y):
  if x <= -1 or y <= -1 or x >= n or y >= n:
    return False
  if graph[x][y] == 1:
    graph[x][y] == 0
    dfs(x - 1, y)
    dfs(x, y - 1)
    dfs(x + 1, y)
    dfs(x, y + 1)
    return True
  return False

result = 0
for i in range(n):
  for j in range(n):
    if dfs(i, j) == True:
      result += 1

print(result)

 

 

RecursionError가 뜬다.

 

BFS로 구현한 코드

from collections import deque

n = int(input())
map_data = [list(map(int, input())) for _ in range(n)]
visited = [[False]*n for _ in range(n)]  # 방문 여부를 저장하는 2차원 리스트

dx = [-1, 0, 1, 0]  # 이동할 네 방향 (상, 우, 하, 좌)
dy = [0, 1, 0, -1]

def bfs(x, y):
    queue = deque([(x, y)])
    visited[x][y] = True
    count = 1  # 현재 단지에 속한 집의 수
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if nx < 0 or nx >= n or ny < 0 or ny >= n:
                continue
            if not visited[nx][ny] and map_data[nx][ny] == 1:
                queue.append((nx, ny))
                visited[nx][ny] = True
                count += 1
    return count

counts = []  # 각 단지에 속한 집의 수를 저장하는 리스트
for i in range(n):
    for j in range(n):
        if map_data[i][j] == 1 and not visited[i][j]:
            counts.append(bfs(i, j))

counts.sort()  # 각 단지에 속한 집의 수를 오름차순으로 정렬

print(len(counts))  # 총 단지수 출력
for count in counts:
    print(count)  # 각 단지에 속한 집의 수 출력
728x90
반응형

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

백준 14502  (0) 2023.04.07
백준 2178  (0) 2023.04.05
백준 14888  (0) 2023.04.04
백준 2661  (0) 2023.04.01
백준 14889  (0) 2023.04.01