clap0107
[백준] 4963번 섬의 개수 - 파이썬 본문
반응형
https://www.acmicpc.net/problem/4963
4963번: 섬의 개수
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도
www.acmicpc.net
풀이:
재귀 dfs를 사용해서 풀었다.
기본 dfs 문제와 달랐던 점은 상, 하, 좌, 우 뿐만 아니라 대각선도 확인해줘야 한다는 것이였다.
그래서 확인 범위를 총 8개로 늘렸더니 성공했다.
앞으로는 재귀를 사용할 때 sys.setrecursionlimit(10**6)를 적어야 한다는 점을 잊지 말아야겠다.
import sys
sys.setrecursionlimit(10**6)
def dfs(y, x):
if y <= -1 or y >= h or x <= -1 or x >= w or grid[y][x] != 1:
return
grid[y][x] = 0
for i in range(8):
dfs(y + dy[i], x + dx[i])
dy = [-1, 1, 0, 0, -1, -1, 1, 1]
dx = [0, 0, -1, 1, -1, 1, -1, 1]
while True:
w, h = map(int, input().split())
if w == 0 and h == 0:
break
grid = []
for _ in range(h):
grid.append(list(map(int, input().split())))
count = 0
for y in range(h):
for x in range(w):
if grid[y][x] == 1:
dfs(y, x)
count += 1
print(count)
반응형
'코딩테스트 > DFS/BFS' 카테고리의 다른 글
[백준] 2644번 촌수계산 - 파이썬 (0) | 2023.02.19 |
---|---|
[백준] 1987번 알파벳 - 파이썬 (2) | 2023.02.19 |
[백준] 2206번 벽 부수고 이동하기 - 파이썬 (0) | 2023.02.15 |
[백준] 14502번 연구소 - 파이썬 (0) | 2023.02.13 |
[백준] 7576번 토마토 - 파이썬 (0) | 2023.02.12 |
Comments