반응형
문제
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 또는 열에 평행해야 한다.
입력
첫째 줄에 N과 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 수가 주어진다.
출력
첫째 줄에 정답 정사각형의 크기를 출력한다.
예제 입력 13 5
42101 22100 22101 |
예제 출력 19
|
예제 입력 22 2
12 34 |
예제 출력 21
|
예제 입력 32 4
1255 3455 |
예제 출력 34
|
예제 입력 41 10
1234567890 |
예제 출력 41
|
예제 입력 511 10
9785409507 2055103694 0861396761 3073207669 1233049493 2300248968 9769239548 7984130001 1670020095 8894239889 4053971072 |
예제 출력 549
|
풀이
모든 좌표를 탐색하며 해당 칸부터 변의 길이를 쭉 늘려나가며 정사각형을 찾는다.
네 꼭짓점이 서로 일치해야 하므로 if문 대신 편리하게 set형을 사용했다.
import sys
input = sys.stdin.readline
n,m = map(int,input().split())
board = [list(input().rstrip()) for _ in range(n)]
max_size = 1
for i in range(n):
for j in range(m):
for k in range(max_size,50):
if n<=i+k or m<=j+k:
break
if len(set([board[i][j],board[i+k][j],board[i][j+k],board[i+k][j+k]])) == 1:
max_size = max(max_size,k+1)
print(max_size**2)
반응형
'알고리즘 연습 > 브루트 포스' 카테고리의 다른 글
[🥉1 / 백준 9506 / 파이썬] 약수들의 합 (0) | 2022.01.28 |
---|---|
[🥉2 / 백준 10448 / 파이썬] 유레카 이론 (0) | 2022.01.27 |
[🥇4 / 백준 1062 / 파이썬] 가르침 (0) | 2021.11.15 |
[🥉2 / 백준 3040 / 파이썬] 백설 공주와 일곱 난쟁이 (0) | 2021.10.18 |
[🥈2 / 백준 10819 / 파이썬] 차이를 최대로 (0) | 2021.10.09 |