문제
N*M크기의 직사각형이 있다. 각 칸은 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 또는 열에 평행해야 한다.
입력
첫째 줄에 N과 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 수가 주어진다.
출력
첫째 줄에 정답 정사각형의 크기를 출력한다.
예제 입력 1
3 5
42101
22100
22101
예제 출력 1
9
풀이
n, m = map(int, input().split())
num_list = [list(map(int, input())) for _ in range(n)]
answer = 0
for i in range(n):
for j in range(m):
for k in range(n if n < m else m):
if i+k < n and j+k < m:
if num_list[i][j] == num_list[i][j+k] == num_list[i+k][j] == num_list[i+k][j+k]:
if answer < k:
answer = k
print((answer+1)**2)
주어진 범위안에서 탐색을 하고, k값을 증가시키며 최대의 꼭짓점을 찾는다.
반응형
'Algorithm > Online judge' 카테고리의 다른 글
[백준] 10972번 > 다음 순열 (0) | 2021.03.03 |
---|---|
[백준] 2512번 > 예산 (0) | 2021.03.03 |
[백준] 11725번 > 트리의 부모 찾기 (0) | 2021.03.02 |
[백준] 1965번 > 상자 넣기 (0) | 2021.03.02 |
[백준] 2225번 > 합분해 (0) | 2021.03.02 |