https://www.acmicpc.net/problem/4963
시간 1초, 메모리 128MB
input :
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) 리밋을 설정하니 통과가 되었다.
잊지 말자!