https://www.acmicpc.net/problem/4963
4963번: 섬의 개수
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도
www.acmicpc.net
<코드>
import sys
from collections import deque
input = sys.stdin.readline
dr = [0,1,0,-1,1,1,-1,-1]
dc = [1,0,-1,0,-1,1,1,-1]
def bfs(r, c):
global cnt
q = deque()
q.append((r, c))
while q:
r, c = q.popleft()
for d in range(8):
nr = r + dr[d]
nc = c + dc[d]
if 0 <= nr < h and 0 <= nc < w and arr[nr][nc] == 1:
arr[nr][nc] = 0
q.append((nr, nc))
while True:
w, h = map(int, input().split())
if w == h == 0:
break
cnt = 0
arr = [list(map(int, input().split())) for _ in range(h)]
for i in range(h):
for j in range(w):
if arr[i][j] == 1:
bfs(i, j)
cnt += 1
print(cnt)
<풀이방법>
8방향으로 bfs탐색
땅인 경우에 그 지점부터 연결된 땅 다 0으로 바꿔주고 cnt +=1
그 다음 땅인 경우 찾아서 반복
cnt 출력
'파이썬' 카테고리의 다른 글
[백준 파이썬] 12852번 1로 만들기 2 (0) | 2022.08.11 |
---|---|
[백준 파이썬] 1325번 효율적인 해킹 (1) | 2022.08.10 |
[백준 파이썬] 2225번 합분해 (0) | 2022.08.06 |
[백준 파이썬] 2294번 동전2 (0) | 2022.08.05 |
[백준 파이썬] 9205번 맥주 마시면서 걸어가기 (0) | 2022.08.04 |