백준 2667번-DFS solution (Python)

풀이 (DFS 사용)

# DFS
import sys
sys.setrecursionlimit(10000) 

# 단지 만들기 
N = int(input())
matrix = [list(input()) for _ in range(N)]
for i in range(N):
    for j in range(N):
        matrix[i][j] = int(matrix[i][j])

# 다른 입력 방법! 찾다가 알게 됨!
# read = lambda : sys.stdin.readline().strip()
# matrix = [list(map(int, list(read()))) for _ in range(N)]

def DFS(matrix, cnt, x, y):
    matrix[x][y] = 0 # visit 해줬으니 다시 안 가게 0으로 만들어주기
    dx = [-1, 1, 0, 0]
    dy = [0, 0, -1, 1]
    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 matrix[nx][ny] == 1:
            cnt = DFS(matrix, cnt + 1, nx, ny)
    return cnt

ans = []
for i in range(N):
    for j in range(N):
        if matrix[i][j] == 1:
            ans.append(DFS(matrix, 1, i, j))

print(len(ans))
for i in sorted(ans):
    print(i)

문제 출처: 백준2667번

좋은 웹페이지 즐겨찾기