Notice
Recent Posts
Recent Comments
05-20 20:45
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

-

[백준 1051] 숫자 정사각형 - 파이썬 본문

Algorithm

[백준 1051] 숫자 정사각형 - 파이썬

choiht 2024. 1. 20. 22:58
반응형

문제

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

 

1051번: 숫자 정사각형

N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행

www.acmicpc.net

 

풀이

input이 아래와 같다면, [0][2], [0][4], [2][2], [2][4]를 꼭짓점으로 하는 정사각형이 넓이가 최대가 되는 정사각형이다.

3 5
42101
22100
22101

 

우리는 넓이가 최대가 되는 정사각형을 찾는게 목적이므로, for문을 돌 때 최대 크기부터 하나씩 줄여가며 시작한다. 

네 꼭짓점이 같으면 True를 리턴하고, 그 때의 변 길이를 제곱하여 넓이를 구한다.

 

 

코드

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

size = min(n, m)  # 최대가 될 수 있는 한 변의 길이

def find_square(s):
    for i in range(n-s+1):
        for j in range(m-s+1):
        
        	# 네 꼭짓점을 이루는 숫자가 모두 같으면
            if square[i][j] == square[i][j+s-1] == square[i+s-1][j] == square[i+s-1][j+s-1]:
                return True
            
    return False
    

# 한 변의 크기가 최대가 되는 숫자부터 하나씩 작아짐
for k in range(size, 0, -1):
    if find_square(k):
        print(k ** 2)
        break
반응형
Comments