Algorithm/Online judge

[백준] 1051번 > 숫자 정사각형

민철킹 2021. 3. 3. 18:13

www.acmicpc.net/problem/1051

 

1051번: 숫자 정사각형

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

www.acmicpc.net

문제

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