백준 4963번 섬의 개수

Solution

  • built in 함수인 map을 지도 이름으로 썼다가 오류가 나서 원인을 한참 찾았다. list, map 등등 다 조심하자. 그냥 상황에 맞추지 말고 무조건 이름은 graph로 써야겠다.
  • x와 y가 은근 헷갈릴 때는 호출하는 곳을 보고 범위를 지정하자.
  • 마지막으로 뭔가 잘 안될 때는 무의식 중에 숫자로 하드코딩한 부분은 없는지 또는 i, j 대신 h, w를 박아놓은 곳은 없는지 살펴보자.
import sys

input = sys.stdin.readline
sys.setrecursionlimit(100000)

move = [[1, 0], [0, 1], [-1, 0], [0, -1], [1, 1], [1, -1], [-1, 1], [-1, -1]]


def dfs(x, y):
    visit[x][y] = True
    for dx, dy in move:
        nx = x + dx
        ny = y + dy
        if 0 <= nx < h and 0 <= ny < w and not visit[nx][ny] and _map[nx][ny] == 1:
            dfs(nx, ny)


while True:
    w, h = map(int, input().split())
    if w == 0 and h == 0:
        break
    _map = [list(map(int, input().split())) for _ in range(h)]
    visit = [[False] * w for _ in range(h)]

    count = 0
    for i in range(h):
        for j in range(w):
            if _map[i][j] == 1 and not visit[i][j]:
                count += 1
                dfs(i, j)
    print(count)