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

인지용·2025년 2월 18일
0

알고리즘

목록 보기
45/46
post-thumbnail

import json
import sys

# with open("./data.txt", "r") as file:
#     def input():
#         return file.readline().strip()
    
def input():
    return sys.stdin.readline().strip()

    # 탑다운 방식으로 찾다가 찾으면 바로 종료.
    # 정사각형의 최대 크기는 min(N or M) * min(N or M)이 된다.

N, M = map(int, input().split(" "))
arr = []

for _ in range(N):
    arr.append(list(map(int, input())))

# 정사각형이기에 최소값이 곧 길이
minValue = min(N, M)

# 탑다운 방식으로 찾다가 찾으면 바로 종료.
for a in range(minValue-1, 0, -1):

    # 한칸씩 줄일때마다 상하좌우로 한칸씩 이동하면서 찾아야함.
    for y in range(N):
        for x in range(M):

            yIndex = y + a
            xIndex = x + a
        
            if(yIndex >= N or xIndex >= M):
                continue
            
            isSame = arr[y][x] == arr[y][xIndex] == arr[yIndex][x] == arr[yIndex][xIndex]
            
            if(isSame):
                # 한 변의 길이
                line = xIndex - x + 1
                
                # 한 변의 길이 * 한 변의 길이
                print(line * line)
                exit()

print(1)

참 막막했지만 해냈다...
제일 큰 정사각형을 찾는 문제이기 때문에
제일 큰것 > 작은것 순으로 찾으면 된다.

정사각형 변의 최대 길이는 min(N, M) 이다.

그래서 크기를 하나씩 낮출때마다 상하좌우로 이동하면서
꼭짓점들이 동일한게 있나~ 탐색해주면 된다.

찾을때까지.

없다면 1 출력
profile
한-줄

0개의 댓글