즐거운 PS 👩‍💻🥰

[백준-파이썬] 4963: 섬의 개수

dalin❤️ 2021. 10. 8. 10:25

백준 문제 !

🌷 코드와 설명

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