🌷 코드와 설명
DFS로 풀었다.
import sys
sys.setrecursionlimit(10**6) #재귀 깊이 설정
dx=[-1,0,1,0,-1,-1,1,1] #상하좌우, 대각선 확인하려고
dy=[0,1,0,-1,-1,1,-1,1]
def DFS(i,j):
for x in range(8): #상하좌우, 대각선 확인하려고
xx = i + dx[x]
yy = j + dy[x]
if 0 <= xx < h and 0 <= yy < w and island_map[xx][yy] == 1:
#상하좌우 대각선을 살펴보다가 1(육지)가 있으면 0으로 바꾸기
island_map[xx][yy] = 0 #다시 카운트하지 않으려고
DFS(xx, yy) #육지가 있으면 그걸 기준으로 또 상하좌우, 대각선 확인하려고
if __name__=='__main__':
while True:
w,h=map(int,input().split())
if w==0 and h==0: break
#입력받기
island_map=[]
for _ in range(h):
island_map.append(list(map(int,input().split())))
cnt=0
for i in range(h):
for j in range(w): #쭉~ 보면서 육지가 발견되면!
if island_map[i][j]==1:
cnt+=1 #하나 세고
island_map[i][j]=0 #0으로 바꿈. 다시 카운트하지 않으려고
DFS(i,j)
print(cnt)
🌱 나에게 특별했던 점
대각선까지 체크해야 하기 때문에
dx=[-1,0,1,0,-1,-1,1,1] dy=[0,1,0,-1,-1,1,-1,1]
로 했다.
2차원 리스트이면 행, 열이 좀 헷갈려서ㅠㅠ 머릿속으로 그려가면서 했다.
0 <= xx < h and 0 <= yy < w and island_map[xx][yy] == 1
이 부분이 좀 헷갈렸다..
TMI) 그리고 이 문제를 풀고 나서 백준 티어가 골드가 되어서 기뻤다ㅠㅠ 🥳
728x90
'즐거운 PS 👩💻🥰' 카테고리의 다른 글
[백준-파이썬] 2468: 안전 영역 (0) | 2021.10.08 |
---|---|
[백준-파이썬] 19685번: Palindromic FizzBuzz (0) | 2021.10.08 |
[백준-파이썬] 7569: 토마토 (0) | 2021.10.08 |
[백준-파이썬] 11723: 집합 (0) | 2021.10.08 |
[백준-파이썬] 14465: 소가 길을 건너간 이유 5 (0) | 2021.10.08 |