문제
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행 또는 열에 평행해야 한다.
입력
첫째 줄에 N과 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 수가 주어진다.
출력
첫째 줄에 정답 정사각형의 크기를 출력한다.
코드
n,m = map(int,input().split())
a = min(n,m)
I = []
for _ in range(n) :
I.append(list(map(int, list(input().strip()))))
for size in range(a, 0, -1):
for i in range(n - size + 1):
for j in range(m - size + 1):
if (I[i][j] == I[i][j + size - 1] and
I[i][j] == I[i + size - 1][j] and
I[i][j] == I[i + size - 1][j + size - 1]):
print(size * size)
exit()
print(size*size)
코드풀이
사각형의 크기를 먼저 입력받는다.
가로 세로 중 작은 변의 길이를 고르고, 해당 길이부터 정사각형의 길이를 한칸씩 줄여가면서 테스트 해본다.
정사각형 테스트는 조건문에서 and를 써서 네 모서리를 확인한다.
현재 검사 상태가 최대인 경우이므로, 정사각형이 성립하면 바로 exit()를 통해 탈출한다.
답은 제곱형태로 출력한다.
'Koala - 19기 > 코딩테스트 심화 스터디' 카테고리의 다른 글
[python/백준] 13371 돌핀 (0) | 2025.07.13 |
---|---|
[백준/Python] #15686: 치킨 배달 (0) | 2025.07.13 |
[백준/Python]#14620 꽃길 (0) | 2025.07.13 |
[백준/Python] 18111 : 마인크래프트 (0) | 2025.07.13 |
[백준/python] 16401 : 과자 나눠주기 (0) | 2025.07.07 |