BOJ 4963 섬의 개수

LONGNEW·2021년 1월 7일
0

BOJ

목록 보기
20/333

https://www.acmicpc.net/problem/4963
시간 1초, 메모리 128MB
input :

  • 여러 개의 테스트 케이스.
  • 너비 w, 높이 h (1 <= w, h <= 50)
  • 1 은 땅, 0은 바다
  • 입력의 마지막 줄에는 0 0 입력.

output :

  • 각 테스트 케이스에 대한 섬의 개수 출력.

조건 :

  • 같은 섬 : 한 정사각형에서 다른 정사각형으로 (상하좌우, 대각선으로 연결)

테스트 케이스를 진행하며 빈 그래프를 채우고 다시 빈 그래프를 채우는 방식.
반복문 안에서 입력을 계속 받아야 함.

필요한 변수
visit 은 1과 0으로 구분 하면 되기에 필요없다.
섬의 수를 기록할island 변수.

필요한 함수
섬의 개수를 카운트 할 함수.

반복문 내부에선 2차원 리스트 전체를 순회하면서 섬의 시작 부분을 찾는다.

정답 코드 :

import sys
sys.setrecursionlimit(10000)

w, h = map(int, sys.stdin.readline().split())
ans = []
def DFS(navi, position):

    navi[position[0]][position[1]] = 0

    dx = [1, -1, 0, 0, -1, -1, 1, 1]
    dy = [0, 0, 1, -1, -1, 1, -1, 1]

    for i in range(len(dx)):
        nx = position[0] + dx[i]
        ny = position[1] + dy[i]
        if nx >= h or nx < 0 or ny >= w or ny < 0:
            continue
        if navi[nx][ny]:
            DFS(navi, [nx, ny])

while w != 0 and h != 0:
    graph = []
    cnt = 0
    for i in range(h):
        data = list(map(int, sys.stdin.readline().split()))
        graph.append(data)

    for x in range(h):
        for y in range(w):
            if graph[x][y]:
                DFS(graph, [x, y])
                cnt += 1

    ans.append(cnt)
    w, h = map(int, sys.stdin.readline().split())

for data in ans:
    print(data)

처음에 런타임 에러가 발생했지만.
sys.setrecursionlimit(10000) 리밋을 설정하니 통과가 되었다.
잊지 말자!

0개의 댓글