백준 1926. 그림

2024. 3. 2. 23:28·백준

https://www.acmicpc.net/problem/1926

 

1926번: 그림

어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로

www.acmicpc.net

'''
그림의 개수와 최대 그림 넓이 출력
'''

from collections import deque
import sys
input = sys.stdin.readline

n, m = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(n)]
visited = [[0] * m for _ in range(n)]
di = [-1,1,0,0]
dj = [0,0,-1,1]
cnt = 0
max_area = 0
def bfs(si,sj):
    global max_area
    q = deque([(si,sj)])
    visited[si][sj] = 1
    area = 1
    while q:
        i,j = q.popleft()
        for w in range(4):
            ni, nj = i+di[w], j+dj[w]
            if 0<=ni<n and 0<=nj<m and visited[ni][nj] == 0:
                if arr[ni][nj] == 1:
                    q.append((ni,nj))
                    visited[ni][nj] = visited[i][j] + 1
                    area += 1
    max_area = max(max_area, area)
for k in range(n):
    for h in range(m):
        if arr[k][h] == 1 and visited[k][h] == 0:
            cnt += 1
            bfs(k,h)

print(cnt)
print(max_area)

 

여기서 처음에 max_area 부분만 틀렸었는데 그 이유가 bfs를 돌릴 때마다 area를 새로 재야됐어야 했는데 그러지 않아서였다...

def bfs(si,sj):
    global max_area
    q = deque([(si,sj)])
    visited[si][sj] = 1
    while q:
        i,j = q.popleft()
        for w in range(4):
            ni, nj = i+di[w], j+dj[w]
            if 0<=ni<n and 0<=nj<m and visited[ni][nj] == 0:
                if arr[ni][nj] == 1:
                    q.append((ni,nj))
                    visited[ni][nj] = visited[i][j] + 1
                    if max_area <= visited[ni][nj]:
                        max_area = visited[ni][nj]
for k in range(n):
    for h in range(m):
        if arr[k][h] == 1 and visited[k][h] == 0:
            cnt += 1
            bfs(k,h)

print(cnt)
print(max_area)

 

영역의 크기(bfs 한번 돌릴때의 모든 1의 개수)와 처음부터 가장 멀리 갔을 때의 노드의 거리랑 헷갈리지 말자!

저작자표시 (새창열림)

'백준' 카테고리의 다른 글

백준 7562. 나이트의 이동  (0) 2024.03.03
백준 1012. 유기농 배추  (0) 2024.03.03
백준 27527. 배너 걸기  (0) 2024.03.01
백준 28353. 고양이 카페  (0) 2024.02.28
백준 11725. 트리의 부모 찾기  (0) 2024.02.28
'백준' 카테고리의 다른 글
  • 백준 7562. 나이트의 이동
  • 백준 1012. 유기농 배추
  • 백준 27527. 배너 걸기
  • 백준 28353. 고양이 카페
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (383) N
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅&리팩토링 (6) N
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (2)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    개발자취업
    항해99
    99클럽
    코딩테스트준비
    Til
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
백준 1926. 그림
상단으로

티스토리툴바