[백준] 4963 (실버2)

zunzero·2022년 8월 21일
0

알고리즘(파이썬)

목록 보기
24/54

해당 문제는 너무 자주 본 유형이다.
이제는 그냥 dfs, bfs임이 자동으로 생각난다.
달라진 점이라면 그저 대각선으로의 이동도 고려해야 한다는 점 뿐이다.

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


while True:
    w, h = map(int, input().split())

    if w == 0 & h == 0:
        break

    graph = []
    for _ in range(h):
        graph.append(list(map(int, input().split())))

    result = 0
    for i in range(h):
        for j in range(w):
            if dfs(i, j):
                result += 1
    print(result)
profile
나만 읽을 수 있는 블로그

0개의 댓글