[BFS] - 섬나라 아일랜드

yeom yaloo·2022년 8월 5일
0

codingtest

목록 보기
2/4


문제

  • 주어진 그래프의 섬의 갯수를 구해라
  • 섬은 상하좌우 대각선이 연결되어 있으면 하나의 섬으로 본다.

코드

from collections import deque

def BFS(x,y):
    q = deque()
    q.append((x,y))
    island[x][y] = 0
    while q:
        x, y = q.popleft()
        for i in range(8):
            nx = x+dx[i]
            ny = y + dy[i]
            if 0<=nx<n and 0<=ny<n and island[nx][ny] == 1:
                island[nx][ny] = 0
                q.append((nx,ny))

    

if __name__ =="__main__":
    n = int(input())
    island = [list(map(int,input().split())) for _ in range(n)]
    dx = [0,0,-1,1,-1,-1,1,1]
    dy = [1,-1,0,0,1,-1,1,-1]
    cnt = 0
    for i in range(n):
        for j in range(n):
            if island[i][j] == 1:
                BFS(i,j)
                cnt += 1
    print(cnt)

풀이

  • 기존 BFS로 푸는 문제에 대각선이라는 조건이 추가되었다.
  • 해당 좌표만큼 확인을 하고 확인이 끝나면 하나의 섬으로 간주해서 cnt를 1씩 증가시켜준다.
  • BFS와 deque를 사용한 문제 풀이에 익숙하다면 어렵지 않은 문제이다.
profile
즐겁고 괴로운 개발😎

0개의 댓글