Koala - 19기/코딩테스트 심화 스터디

[백준/python] 1051번 : 숫자 정사각형

whiteys1 2025. 7. 13. 17:11

문제

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

입력

첫째 줄에 N과 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 수가 주어진다.

출력

첫째 줄에 정답 정사각형의 크기를 출력한다.

코드

n,m = map(int,input().split())

a = min(n,m)
I = []

for _ in range(n) :
    I.append(list(map(int, list(input().strip()))))

for size in range(a, 0, -1): 
    for i in range(n - size + 1):
        for j in range(m - size + 1):
            if (I[i][j] == I[i][j + size - 1] and
                I[i][j] == I[i + size - 1][j] and
                I[i][j] == I[i + size - 1][j + size - 1]):
                print(size * size)
                exit()

print(size*size)

코드풀이

사각형의 크기를 먼저 입력받는다.
가로 세로 중 작은 변의 길이를 고르고, 해당 길이부터 정사각형의 길이를 한칸씩 줄여가면서 테스트 해본다.
정사각형 테스트는 조건문에서 and를 써서 네 모서리를 확인한다.
현재 검사 상태가 최대인 경우이므로, 정사각형이 성립하면 바로 exit()를 통해 탈출한다.
답은 제곱형태로 출력한다.