CodingTest/Baekjun Online Judge

[ BOJ / 파이썬 ] 1926. 그림

EEOOOO 2023. 1. 27. 13:38

과거에 풀었던 문제. ( 링크 )

6개월만에 푸니 확실히 속도나 이해도가 좋긴 하다.

 

제출 1. 통과

import sys
input = sys.stdin.readline
from collections import deque
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def getArea(a, b, board):
  area = 1
  q = deque([(a, b)])
  board[a][b] = 2
  n = len(board)
  m = len(board[0])
  while q:
    x, y = deque.popleft(q)
    for i in range(4):
      nx = x + dx[i]
      ny = y + dy[i]
      if 0 <= nx < n and 0 <= ny < m and board[nx][ny] == 1:
        q.append((nx, ny))
        board[nx][ny] = 2
        area += 1

  return area

def main():
  n, m = map(int, input().split())
  board = [list(map(int, input().split())) for _ in range(n)]
  visited = [[False] * m for _ in range(n)]
  maxArea = 0
  drawingNum = 0
    
  for i in range(n):
    for j in range(m):
      if board[i][j] == 1:
        drawingNum += 1
        nowArea = getArea(i, j, board)
        maxArea = max(maxArea, nowArea)

  print(drawingNum)
  print(maxArea)      

if __name__ == '__main__':
  main()

 

속도도 절반으로 줄었다. ❣

 

 

BFS 중에서도 Flood Fill 스타일