하루일문
[백준] 1051번 숫자 정사각형 본문
문제
https://www.acmicpc.net/problem/1051
1051번: 숫자 정사각형
N×M크기의 직사각형이 있다. 각 칸에는 한 자리 숫자가 적혀 있다. 이 직사각형에서 꼭짓점에 쓰여 있는 수가 모두 같은 가장 큰 정사각형을 찾는 프로그램을 작성하시오. 이때, 정사각형은 행
www.acmicpc.net
코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
square= []
for i in range(N):
square.append(list(input().strip()))
min_line = min(N, M)
size = 1
for i in range(N):
for j in range(M):
# 정사각형을 만들기 위해 N, M 둘 중 짧을 것을 체크
for k in range(1, min_line):
# 정사각형 조건이 되면서, 각 꼭지점의 크기가 같을 때
if i + k < N and j + k < M :
if square[i][j] == square[i+k][j] == square[i][j+k] == square[i+k][j+k]:
size = max(size, (k+1)**2)
print(size)
해설
자세한 것은 주석 참조
1. 최대 정사각형 크기를 찾는다
2. 가로 / 세로로 돌아준다
3. 최대 정사각형 크기만큼 돌면서 그 크기를 넘지 않으면서 각 꼭지점의 수가 같을 경우를 찾아 size를 큰 수로 갱신 해준다.
'algorithm > baekjoon' 카테고리의 다른 글
[백준] 1010번 다리 놓기 (0) | 2023.07.28 |
---|---|
[백준] 1173번 운동 (0) | 2023.06.23 |
[백준] 14938번 서강그라운드(파이썬) (0) | 2023.05.22 |
[백준] 1058번 친구(파이썬) (1) | 2023.05.20 |
[백준] 시리얼 번호 (파이썬) (0) | 2023.05.16 |