백준(3321) - 가장 큰 직사각형 Python

최대 1 분 소요

백준(3321) - 가장 큰 직사각형

문제풀이: 그래프, 파이썬

해결방법

예시)

10 6
001010
111110
011110
111110
011110
111111
110111
110111
000101
010101
  • 연속된 1을 기록한다.

    image

  • 각 행을 내림차순 정렬한다.

    image

  • 내림차순으로 정렬된 행들마다 직사각형의 넓이를 계산해준다.

    각 행렬에 적혀있는 값은 세로 길이라고 보면 되고,

    가로 길이는 1,2,3… 으로 하나씩 계산해가며 넓이의 최대값을 갱신해주면 된다.

import sys

N, M = map(int, input().split())
graph = [[] for _ in range(N)]

for i in range(N):
    input_data = sys.stdin.readline().rstrip()
    graph[i] = [int(i) for i in input_data]

for i in range(1, N):
    for j in range(M):
        if graph[i][j] == 1:
            graph[i][j] = graph[i-1][j] + 1

max_size = 0
for i in range(N):
    arr = graph[i]
    arr.sort(reverse=True)
    for idx in range(M):
        size = (idx+1) * arr[idx]
        max_size = size if size > max_size else max_size

print(max_size)

댓글남기기