하루일문

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

algorithm/baekjoon

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

support_u 2023. 8. 10. 18:57

문제

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