[Python - 1926] 그림 (S1)

2024. 6. 28. 22:25·알고리즘 연습/백준

문제

1926번: 그림

문제

문제 이해

  • 도화지에 그려진 그림의 개수와 그림 중 넓이가 가장 넓은 그림의 넓이를 출력
  • 1로 연결된 것을 한 그림이라고 정의, 가로나 세로는 연결된 것이고 대각선은 떨어진 것
  • 그림의 넓이란 그림에 포함된 1의 개수

입력 조건

  • 첫째 줄에 도화지의 세로 크기 n(1 <= n <= 500)과 가로 크기 m(1 <= m <= 500)이 주어짐
  • 두 번째 줄부터 n+1 줄까지 그림의 정보가 주어짐 (0 : 색칠 안 된 부분, 1 : 색칠된 부분)

출력 조건

  • 첫째 줄에는 그림의 개수, 둘째 줄에는 가장 넓은 그림의 넓이를 출력
  • 단, 그림이 하나도 없는 경우에는 가장 넓은 그림의 넓이는 0

풀이

DFS를 사용해 도화지의 모든 부분을 순회하며, 그림의 개수와 가장 넓은 넓이를 탐색
  1. 입력 조건에 맞게 n, m, graph(도화지) 입력
  2. dfs 함수 구현 : count를 인자로 넣어 그림의 넓이를 확인
    • 도화지의 범위를 넘어가면 count 반환
    • 그림이 그려진 영역 (1)이면, 0으로 변경 후 가로/세로 영역을 재귀적으로 탐색
  3. 모든 땅을 순회하며, 그림의 개수와 최대 넓이를 찾음

코드

  • n과 m의 범위를 고려하여 recursion limit을 여유롭게 설정
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

def dfs(x, y, count):
    if x < 0 or x >= n or y < 0 or y >= m:
        return count
    
    if graph[x][y] == 1:
        graph[x][y] = 0
        count += 1
        count = dfs(x + 1, y, count)
        count = dfs(x - 1, y, count)
        count = dfs(x, y + 1, count)
        count = dfs(x, y - 1, count)
        return count
    return count

n, m = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]

max_area = 0
print_count = 0
for i in range(n):
    for j in range(m):
        area = dfs(i, j, 0)
        if area != 0:
            print_count += 1
        if max_area < area:
            max_area = area

print(print_count)
print(max_area)

'알고리즘 연습 > 백준' 카테고리의 다른 글

[Baekjoon] 11월 - 1일 1문제 풀기 기록장  (0) 2024.11.12
[Baekjoon] 10월 - 1일 1문제 풀기 기록장  (1) 2024.10.15
[Python - 1012] 유기농 배추 (S2)  (0) 2024.06.19
[Python - 1051] 숫자 정사각형 (S3)  (0) 2024.06.17
[Python - 1049] 기타줄 (S4)  (0) 2024.06.13
'알고리즘 연습/백준' 카테고리의 다른 글
  • [Baekjoon] 11월 - 1일 1문제 풀기 기록장
  • [Baekjoon] 10월 - 1일 1문제 풀기 기록장
  • [Python - 1012] 유기농 배추 (S2)
  • [Python - 1051] 숫자 정사각형 (S3)
기억에 남는 블로그 닉네임
기억에 남는 블로그 닉네임
  • 기억에 남는 블로그 닉네임
    얕게, 깊게
    기억에 남는 블로그 닉네임
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 분류 전체보기 N
      • Data Engineering
        • Airflow
        • 빅데이터
        • 자동화
        • 기타
      • Infra
        • AWS
        • Terraform
        • [인프라 구축기] Terraform 활용 AWS ..
      • CS
        • 자료구조
        • 알고리즘
        • 네트워크
        • 데이터베이스
        • 이것이 취업을 위한 코딩 테스트다 with 파이썬
      • Python
      • Web
      • Git
      • 기타 N
        • 취업 & 진로
        • 회고록 N
        • 기타
      • 프로젝트 단위 공부
        • [부스트코스] DataLit : 데이터 다루기
        • [개인 프로젝트] 공모전 크롤링
        • [개인 프로젝트] FC Online 공식 경기 분..
        • 프로젝트 개선 방안
      • [프로그래머스] 데이터 엔지니어링 데브코스 3기
        • TIL(Today I Learn)
        • 숙제
        • 기타
      • 알고리즘 연습
        • 프로그래머스
        • 백준
  • 링크

    • 깃허브
    • 링크드인
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기억에 남는 블로그 닉네임
[Python - 1926] 그림 (S1)
상단으로

티스토리툴바