알고리즘/백준(BOJ)

[백준/알고리즘]#1051: 숫자 정사각형 [파이썬(python)/브루트포스]

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

 

1051번: 숫자 정사각형

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

www.acmicpc.net

 

브루트포스 알고리즘 문제로 

브루트 포스는 "Brute Force", 즉 무식한 강제(?)라고 직역할 수 있습니다.

그리디 알고리즘과 다르게 완전 탐색으로 BFS, DFS,이분탐색처럼 모든 노드를 탐색하는 방법입니다.

 

그러므로 이 문제에서는 직사각형의 꼭짓점을 모두 탐색하도록 알고리즘을 구현하면 됩니다.

 

파이썬 코드

import sys
input = sys.stdin.readline

N, M = map(int, input().split())
rec=[]
for _ in range(N):
    rec.append(list(input()))

search = min(M,N)
pointer = 0
for i in range(N):
    for j in range(M):
        for k in range(search):
            if (i+k)<N and (j+k)<M:
                if rec[i][j]==rec[i][j+k] and rec[i][j]==rec[i+k][j] and rec[i][j]==rec[i+k][j+k]:
                    if pointer < k:
                        pointer = k

print((pointer+1)*(pointer+1))