BOJ - 1926

주의·2023년 12월 3일
0

boj

목록 보기
29/214

백준 문제 링크
그림

❓접근법

  1. BFS를 사용했다.
  2. 계속 하던대로 방문한 좌표는 queue에 넣어주고, 도화지에서 변경한다.(1 -> 0)
  3. 상,하,좌,우를 방문해서 1이 있는 곳을 모두 탐색한 다음 count를 return하는 함수를 만들면 된다.
  4. 도화지를 for문 2개로 돌면서 좌표의 값이 1이라면 count를 bfs(i,j)로 저장하고, answer에 count를 넣어준다.
  5. 그림이 하나도 없는 경우는 0을 출력하고,
    그 외에는 그림의 개수와 가장 넓은 그림의 넓이를 출력한다.

👌🏻코드

from collections import deque
n, m = map(int, input().split())
lst = []
for _ in range(n):
    lst.append(list(map(int, input().split())))


dx = [0,0,1,-1]
dy = [1,-1,0,0]
            
            
def bfs(x,y):
    queue = deque()
    queue.append((x,y))
    
    lst[x][y] = 0
    count = 0
    
    while queue:
        x,y = queue.popleft()
        count += 1
        
        for d in range(4):
            nx = x + dx[d]
            ny = y + dy[d]
        
            if (0 <= nx < n) and (0 <= ny < m) and (lst[nx][ny] == 1):
                queue.append((nx,ny))
                lst[nx][ny] = 0
                
    return count
        
answer = []    
for i in range(n):
    for j in range(m):
        if lst[i][j] == 1:
            count = bfs(i,j)
            answer.append(count)
            
            
if len(answer) == 0:
    print(0)
    print(0)
    
else:
    print(len(answer))
    print(max(answer))
    

0개의 댓글